魔法の 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) に注目してください。