将第一个元素移动到数组末尾的最快方法

时间:2013-12-04 20:59:36

标签: javascript arrays element

我想知道JavaScript中将元素从Array的开头移动到结尾的最快方法是什么。例如,如果我们有

[8,1,2,3,4,5,6,7]

我们想要:[1,2,3,4,5,6,7,8]

我想将第一个元素移到最后。我正在考虑用元素1切换元素0,在元素2之后切换元素1,依此类推,直到8处于和(基本上如何起泡)。我想知道是否有更快的方法将第一个元素带到最后。

我将使用小数组(大约10个元素),我想避免使用shift(),因为它很慢。

这就是我现在在chrome上的速度比普通shift +快45%:http://jsperf.com/shift-myfunc

数组中将有一些对象用于游戏。

9 个答案:

答案 0 :(得分:78)

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 example

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 1 :(得分:22)

使用shiftpush

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


真正最快的是什么?

最快的是什么,取决于你在使用数组做什么。如果您只是使用第一个索引,那么将代码读取为索引而不是移动值将是最快的。如果您正在使用所有索引,而不仅仅是循环和通过,当您到达结束时,从零开始。基本柜台。

答案 2 :(得分:7)

以防万一你想把任何元素放到最后:

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

for position只需将它包装在forEach中。

答案 3 :(得分:6)

使用splice获取第一个元素

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

然后推送,如果是最后一个。

由于splice方法的返回值是一个数组,你必须说

array.push(first[0]);

这里的工作示例:JSFIDDLE

答案 4 :(得分:3)

var a = [1,2,3,4,5,6,7,8];
var b= a[7];
var c = a.slice(1, 8);
c.push(b);

编辑:最好换班,就像epascarello在his answer中所做的那样。

答案 5 :(得分:3)

这是一个甜蜜的ES6版本

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

const [first, ...rest] = arr;
arr = [...rest,first]

答案 6 :(得分:1)

  

还有一种味道

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

concat不仅可以在元素的末尾或开始处添加元素,而且还可以添加其他数组

答案 7 :(得分:1)

使用ES20 ...

const newArr = [
   ...arr.slice(1),
   arr[0]
];

答案 8 :(得分:0)

更新将元素从一个极端移动到另一个极端的数组:

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