[英]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.