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

5

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

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

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


2
定义最快?性能还是最短的代码? - Marty
2
您的标题和示例显示将元素从末尾移动到第二个位置,但您的描述说是数组的“顶部”(这意味着第一个)。这是哪一个? - ShadowRanger
你需要改变三个元素才能得到你想要的结果,而不是一个。 - dandavis
3个回答

14

将数组末尾元素移至第二个位置最简单的方法是:

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

splice 接受两个固定参数:开始删除的索引和要删除的元素数量,然后是可变参数,表示要在同一位置插入的元素。所以这里从索引1开始,删除0个元素,并插入从末尾弹出的元素。我不能保证它总是最快的(因为不同浏览器的实现可能会有所不同),但它避免了构建任何中间数组,并且尽可能明确/直接。

如果目标是从末尾移动到开头(您的问题描述称为“移到顶部”),那么就更简单了:

arrayData.unshift(arrayData.pop())

您只需要从右侧弹出并将结果值“unshift”到左侧即可。


2
如果您使用像unshift或splice这样的本地方法,它将重新构建整个数组。最快的方法是使用临时变量切换必要的值。这样操作就会成为O(1) ->常数时间,而不是O(N) ->线性时间。
var temp = arrayData[0];
arrayData[0] = arrayData[arrayData.length -1];
arrayData[arrayData.length -1] = temp;

只為第二個位置創建它 :) - Keith Nicholas
嗨,Keith,我修好了..是我的错..谢谢!顺便说一句,这很棒..我喜欢测试结果..差别很大!! - Elvio Cavalcante
2
除了 OPs 数组中的 3/4 元素需要更改,所以它比那复杂得多... - dandavis

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接