[英]Fastest way to move first element to the end of an Array
我想知道 JavaScript 中将元素从Array
的开头移动到结尾的最快方法是什么。 例如,如果我们有
[8,1,2,3,4,5,6,7]
我们想要: [1,2,3,4,5,6,7,8]
我想将第一个元素移到最后。 我正在考虑将元素 0 与元素 1 切换,然后将元素 1 与元素 2 切换,依此类推,直到 8 位于和(基本上是冒泡排序的工作原理)。 我想知道是否有更快的方法来结束第一个元素。
我将使用小数组(大约 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
什么才是最快的?
最快的实际上取决于您对阵列的处理方式。 如果您只是使用第一个索引,那么让您的代码读取索引而不是移动值将是最快的。 如果您正在使用所有索引,则不仅仅是循环和通过,当您到达最后时从零开始。 基本计数器。
这是一个甜蜜的 ES6 版本
let arr = [1,2,3,4,5,6]
const [first, ...rest] = arr;
arr = [...rest,first]
使用 splice 获取第一个元素
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 中即可。
var a = [1,2,3,4,5,6,7,8];
var b= a[7];
var c = a.slice(1, 8);
c.push(b);
编辑:最好只是转移,就像 epascarello 在他的回答中所做的那样。
使用 ES20...
const newArr = [
...arr.slice(1),
arr[0]
];
还有一种味道
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' ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.