JavaScriptでArray
の先頭から末尾に要素を移動する最も速い方法は何だろうと思っています。たとえば、
_[8,1,2,3,4,5,6,7]
_
そして、私たちが欲しい:_[1,2,3,4,5,6,7,8]
_
最初の要素を最後に移動したい。私は要素0を要素1に切り替えた後、要素1を要素2に切り替えて、8がandになるまで(基本的にはバブルソートの動作)について考えていました。最初の要素を終わらせるためのより速い方法があるかどうか疑問に思っていました。
私は小さな配列(約10要素)を使用しますが、shift()
はかなり遅いので避けたいです。
これは私が今持っているものですchromeそれは通常のshift + Pushより45%高速です: http://jsperf.com/shift-myfunc
配列には、ゲーム用のオブジェクトが含まれます。
var ary = [8,1,2,3,4,5,6,7];
ary.Push(ary.shift()); // results in [1, 2, 3, 4, 5, 6, 7, 8]
var ary = [8,1,2,3,4,5,6,7];
console.log("Before: " + ary);
ary.Push(ary.shift()); // results in [1, 2, 3, 4, 5, 6, 7, 8]
console.log("After: " + ary);
_var a = ["a","b","c"];
var b = a.shift();
a.Push(b);
_
または
_var b = a.shift();
a[a.length] = b;
_
最速になるのは何ですか?本当に配列の内容とブラウザ/バージョンに依存します!
最初のインデックスを削除する方法は何ですか?
shift()
splice()
slice()
最後のインデックスに追加する方法は何ですか?
Push()
array[array.length]
_concat()
-試しさえしません他の方法
JSPerf:
http://jsperf.com/test-swapping-of-first-to-last
実際に最も速いのは何ですか?
最速は、実際にアレイで何をしているかによって異なります。最初のインデックスのみを使用している場合、コードにインデックスを読み取らせ、値をシフトさせないようにするだけで最速になります。すべてのインデックスを使用している場合、ループとスルーだけでなく、最後に到達したときにゼロから開始します。基本的なカウンター。
スプライスを使用して最初の要素を取得する
var first = array.splice(0,1);
その後、最後の場合にプッシュしてください。
Spliceメソッドの戻り値は配列なので、言う必要があります
array.Push(first[0]);
ここでの作業例: [〜#〜] jsfiddle [〜#〜]
最後に要素を置きたい場合に備えて:
var ary = [8,1,2,3,4,5,6,7];
ary.Push(ary.splice(position, 1)[0]);
position
の場合は、これをforEachでラップするだけです。
そして、これは甘いES6バージョンです
let arr = [1,2,3,4,5,6]
const [first, ...rest] = arr;
arr = [...rest,first]
var a = [1,2,3,4,5,6,7,8];
var b= a[7];
var c = a.slice(1, 8);
c.Push(b);
Edit:epascarelloが his answer で行ったように、単にシフトする方がおそらく良いでしょう。
もう一つの味
var arr = [0, 1, 2];
arr = arr.concat(arr.shift())
concatは要素だけでなく、末尾または先頭に別の配列を追加できます
要素を一方の端からもう一方の端に移動する配列を更新します。
const array = ['First', 'Second', 'Third', 'Fourth'];
const next = [...array]
next.Push(next.shift())
console.log(next); // [ 'Second', 'Third', 'Fourth', 'First' ]
const prev = [...array]
prev.unshift(prev.pop())
console.log(prev); // [ 'Fourth', 'First', 'Second', 'Third' ]