魔法の回転機能

黄舟
リリース: 2017-02-15 14:21:11
オリジナル
2999 人が閲覧しました

魔法の rotate または配列反転関数を紹介したいと思います。まず例を見てみましょう:


var data = [1, 2, 3, 4, 5];

rotate(data, 1) // => [5, 1, 2, 3, 4]
rotate(data, 2) // => [4, 5, 1, 2, 3]
rotate(data, 3) // => [3, 4, 5, 1, 2]
rotate(data, 4) // => [2, 3, 4, 5, 1]
rotate(data, 5) // => [1, 2, 3, 4, 5]
ログイン後にコピー

トリックが分かりましたか?見えなくても構いませんので、説明させていただきます。

最初の rotate(data,1) を例にとります。これは、最初から最後までの要素が 1 つ右に移動されるのと同じです。半月の弧を描いて先頭に立つ。

そして rotate(data,2)rotate(data,1) に基づいて同じ操作を実行します。

rotate(data,3)Based on rotate(data,2)...

これはまだ終わっていません。rotate関数にはより強力な関数があり、負の数を渡してみてください。何が起こるか?


rotate(data, -1) // => [2, 3, 4, 5, 1]
rotate(data, -2) // => [3, 4, 5, 1, 2]
rotate(data, -3) // => [4, 5, 1, 2, 3]
rotate(data, -4) // => [5, 1, 2, 3, 4]
rotate(data, -5) // => [1, 2, 3, 4, 5]
ログイン後にコピー


注意していれば、これが正の数を回転するのとは逆のプロセスであることにすぐに気づくかもしれません。

0 が渡された場合の反応はどうなりますか?


rotate(data, 0) // => [1, 2, 3, 4, 5]
ログイン後にコピー

0回反転しますが、何もしないだけではありませんか?^_^

この関数はほぼ全能です:

数値配列を使用でき、他のオブジェクト配列も反転できます。


rotate(['a', 'b', 'c'], 1)     // => ['c', 'a', 'b']
rotate([1.0, 2.0, 3.0], 1)     // => [3.0, 1.0, 2.0]
rotate([true, true, false], 1) // => [false, true, true]
ログイン後にコピー

何度でも裏返してください!何万回来ても!


var data = [1, 2, 3, 4, 5]

rotate(data, 7)     // => [4, 5, 1, 2, 3]
rotate(data, 11)    // => [5, 1, 2, 3, 4]
rotate(data, 12478) // => [3, 4, 5, 1, 2]
ログイン後にコピー

さて、たくさんの魔法の機能を見た後、それを実装する方法を考えてみましょう。
基本的な状況は正の数、負の数、ゼロの 3 つがあるので、1 つずつ倒しましょう。

正の数の場合は、この関数を具体的に書くだけです:


if(typeof Array.prototype.shiftRight !== "function"){
    Array.prototype.shiftRight = function(n){
      while(n--){
        this.unshift(this.pop());
      }
    };
}
ログイン後にコピー

次に、負の数の場合、この関数と反対の関数に依存します:


if(typeof Array.prototype.shiftLeft !== "function"){
    Array.prototype.shiftLeft = function(n){
      while(n--){
        this.push(this.shift());
      }
    };
}
ログイン後にコピー


最後に、を統合するだけで済みます。回転関数 出力:

function rotate(array,n){
    //copy array
    array = array.slice(0);
    if(n > 0){
        array.shiftRight(n);
    }
    else if(n < 0){
        array.shiftLeft(-n);
    }
    return array;
}
ログイン後にコピー


上記は魔法の回転関数の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。





関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!