web-dev-qa-db-ja.com

最初の要素を配列の最後に移動する最も速い方法

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

配列には、ゲーム用のオブジェクトが含まれます。

43
Bosiwow
var ary = [8,1,2,3,4,5,6,7];
ary.Push(ary.shift());  // results in [1, 2, 3, 4, 5, 6, 7, 8] 

jsFiddleの例

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);
83
j08691

shift および Push を使用します

_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()-試しさえしません

他の方法

  • forループ-新しい配列を作成します[大きな配列では恐ろしくなります]

JSPerf:

http://jsperf.com/test-swapping-of-first-to-last


実際に最も速いのは何ですか?

最速は、実際にアレイで何をしているかによって異なります。最初のインデックスのみを使用している場合、コードにインデックスを読み取らせ、値をシフトさせないようにするだけで最速になります。すべてのインデックスを使用している場合、ループとスルーだけでなく、最後に到達したときにゼロから開始します。基本的なカウンター。

22
epascarello

スプライスを使用して最初の要素を取得する

var first = array.splice(0,1);

その後、最後の場合にプッシュしてください。

Spliceメソッドの戻り値は配列なので、言う必要があります

array.Push(first[0]);

ここでの作業例: [〜#〜] jsfiddle [〜#〜]

7
Felipe Fonseca

最後に要素を置きたい場合に備えて:

var ary = [8,1,2,3,4,5,6,7];
ary.Push(ary.splice(position, 1)[0]);

positionの場合は、これをforEachでラップするだけです。

7
artdias90

そして、これは甘いES6バージョンです

let arr = [1,2,3,4,5,6]

const [first, ...rest] = arr;
arr = [...rest,first]
4
Nicholas
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 で行ったように、単にシフトする方がおそらく良いでしょう。

3
Jeroen Bollen

もう一つの味

var arr = [0, 1, 2];
arr = arr.concat(arr.shift())

concatは要素だけでなく、末尾または先頭に別の配列を追加できます

1
MohitGhodasara

要素を一方の端からもう一方の端に移動する配列を更新します。

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' ]
0
feralamillo