将最后一个元素移动到数组中的第二个项目的最快方法

Fastest way to move the last element to second item in the array

本文关键字:第二个 项目 方法 元素 最后一个 移动 数组      更新时间:2023-09-26

我有arrayData = ['abc', 'bcd', 'cdf', 'dfg']数组

是否有最快的方法将项目移动到数组顶部?

所以最终结果应该是arrayData = ['abc', 'dfg' , 'bcd', 'cdf' ]

从数组末尾移动到第二个位置的最简单方法是:

arrayData.splice(1, 0, arrayData.pop())

splice 采用两个固定参数,即要开始的索引和要删除的元素数,然后是要插入到相同位置的元素的变量参数。因此,这从索引 1 开始,删除 0 个元素,然后插入它从末尾弹出的元素。我不能发誓它总是最快的(实现可能很容易因浏览器而异),但它避免构造任何中间数组,并且尽可能明确/直接。

如果目标是从头到尾移动(您的问题描述说移动到"顶部"),那么它就更简单了:

arrayData.unshift(arrayData.pop())

您只需从右侧弹出并将结果值"取消移位"到左侧。

如果使用 unshift 或 splice 等本机方法,它将重建整个数组。最快的方法是使用临时变量切换必要的值。这样,运算将是 O(1) -> 恒定时间,而不是 O(N) -> 线性时间。

var temp = arrayData[0];
arrayData[0] = arrayData[arrayData.length -1];
arrayData[arrayData.length -1] = temp;

使用 Array 对象的拼接方法,我认为您的问题已经得到了解答。在堆栈溢出上,请参阅:如何将项目插入到特定索引处的数组中?有关更多详细信息和示例,请参阅:http://ariya.ofilabs.com/2014/02/javascript-array-slice-vs-splice.html