最佳实践切换阵列中两个项目的位置

时间:2011-10-26 05:21:51

标签: javascript

通过JavaScript切换数组中两个项目的最佳做法是什么?

例如,如果我们有这个数组['one', 'two', 'three', 'four', 'five', 'six']并想要用5替换2来获得最终结果:['one', 'five', 'three', 'four', 'two', 'six']

enter image description here

理想的解决方案简短而有效。

更新

var temp技巧正在发挥作用,我知道了。我的问题是:是否更快地使用JavaScript native Array methods

array.splice().concat().blah().blah()这样的东西似乎更快并且使用更少的内存。我没有开发使用Array方法的函数,但我确信它是可能的。

2 个答案:

答案 0 :(得分:2)

只需将变量用作临时存储:

var temp = data[1];
data[1] = data[4];
data[4] = temp;

由于这只是复制数组中的值,因此它避免了像切片和拼接这样的方法在数组的大部分周围移动或创建全新的数组,相比之下这将非常昂贵,并且还会严重缩放。这是一个O(1)操作,而拼接将是一个O(n)操作,其中n是要移动的项目数,这类似于length * 2-index1-index2。

以下是针对不同方式交换项目的性能测试:http://jsperf.com/array-item-swap/2

即使你以某种方式使用splice以便它不需要移动大量数据,它仍然很慢。复制值的速度提高了约50倍。

答案 1 :(得分:1)

看起来Guffa打败了我,但这是一个可行的功能(和工作示例)。

http://jsfiddle.net/neilheinrich/Hu389/

var my_array = [1, 2, 3, 4, 5, 6];

var swapArrayPosition = function (array, index_1, index_2) {
  var temp = array[index_1];
  array[index_1] = array[index_2];
  array[index_2] = temp;
}

swapArrayPosition(my_array, 4, 1);