Javascript 最佳实践切换数组中两个项目的位置

Javascript 最佳实践切换数组中两个项目的位置,javascript,Javascript,通过JavaScript在数组中切换两个项目的最佳实践是什么 例如,如果我们有这个数组['1','2','3','4','5','6']并且想要用5替换2以获得最终结果:['1','5','3','4','2','6'] 理想的解决方案是短而有效的 更新: var-temp技巧正在发挥作用,我知道这一点。我的问题是:是否使用更快 类似于array.splice()。我没有开发使用数组方法的函数,但我确信这是可能的。只需使用变量作为临时存储: var temp = data[1]; data[1

通过JavaScript在数组中切换两个项目的最佳实践是什么

例如,如果我们有这个数组
['1','2','3','4','5','6']
并且想要用5替换2以获得最终结果:
['1','5','3','4','2','6']

理想的解决方案是短而有效的

更新:

var-temp
技巧正在发挥作用,我知道这一点。我的问题是:是否使用更快


类似于
array.splice()。我没有开发使用数组方法的函数,但我确信这是可能的。

只需使用变量作为临时存储:

var temp = data[1];
data[1] = data[4];
data[4] = temp;
因为这只是复制数组中的值,所以它避免了像slice和splice这样的方法,这些方法在数组的大部分区域移动,或者创建全新的数组,相比之下,这些方法非常昂贵,而且扩展性也很差。这是一个O(1)操作,而拼接将是一个O(n)操作,其中n是要移动的项目数,类似于长度*2-index1-index2

以下是交换项目的不同方式的性能测试:


即使您使用
splice
的方式不需要移动大量数据,它仍然很慢。复制值的速度大约快了50倍。

看起来Guffa比我快了很多,但这里有一个函数(和工作示例)可以工作


事实上,我在没有照片的情况下得到了它;)我很好奇你期望得到什么样的答案。xor技巧之类的东西在javascript中有些浪费。数组方法是否更快将与javascript引擎实现紧密耦合。如果您喜欢,您可以使用该站点在不同浏览器之间进行更快的基准测试-数组方法,或者使用临时变量进行旧的交换。我很想看看结果。这是我的quick,它的初步结果是温度变量方法更快。不过,如果你能改进我的测试用例,请改进。@Mohsen:我补充了一点解释。我将尝试创建一个性能测试来显示差异。我需要JSPerf来确保。在这里,我正在开发一个函数来使用方法实现这一点。这并不容易,因为1不需要从函数返回数组,因为它会在适当的位置更改数组。如果函数将创建一个新数组并保持原始数组不变,则返回它将被使用。这是真的,但我必须更新流以使其以这种方式工作。谢谢你的来信。更新
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);