将最后一个元素移动到数组中的第二个项目的最快方法
Fastest way to move the last element to second item in the array
我有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
相关文章:
- 下拉选择可自动更改第二个下拉选择
- 为什么不'在JQuery中找到第二个css选择器的工作
- 当单击第一个李时,它显示内容一,当单击第二个李时,它显示内容二
- CORS-重定向到第二个GET正在接收的页面
- 正则表达式与数字中的第二个点匹配
- 如何在react js中移动第二个组件
- 使用Javascript,如何显示<tr>在另一<tr>悬停时,隐藏第二个<tr>
- 计算多个项目的价格
- 单击的第二个项目无法正常工作
- 无法为项目分配第二个项目
- JS深度比较2个对象并删除在第二个对象中找到的项目,而不是第一个
- 将最后一个元素移动到数组中的第二个项目的最快方法
- 将两个数组中的项目合并到第三个数组中,其中一列从第一个数组中减去第二个索引
- 使用 ng-if 选择 ng-repeat 循环中的第二个项目
- 为什么单击第二个项目后,此单击功能不起作用
- 按第一个列表中项目的索引将项目添加到第二个列表中
- 将单击下拉列表的项目传递到第二个文件
- jQuery -添加类与相同的类每第二个项目,然后重置,如果中断
- 引用 Visual Studio 中第二个项目中的泛型处理程序
- Ext.js: Vbox布局如何使第一个项目占用所有的空间时,第二个项目是隐藏的