我想知道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
数组中将有一些对象用于游戏。
答案 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 强>
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;
答案 1 :(得分:22)
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
真正最快的是什么?
最快的是什么,取决于你在使用数组做什么。如果您只是使用第一个索引,那么将代码读取为索引而不是移动值将是最快的。如果您正在使用所有索引,而不仅仅是循环和通过,当您到达结束时,从零开始。基本柜台。
答案 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' ]