2010-10-25 53 views
31

可能重复:
Javascript swap array elements交换两个项目在JavaScript阵列

我有一个这样的数组:

this.myArray = [0,1,2,3,4,5,6,7,8,9]; 

现在我想做的是,两个项目的交换位置给他们的位置。 例如,我要与项目8(也就是7) 应该结果是在交换项目4(也就是3):

this.myArray = [0,1,2,7,4,5,6,3,8,9]; 

我怎样才能做到这一点?

+2

重复(与一些离谱的解决方案为您的娱乐) - http://stackoverflow.com/questions/872310/javascript-swap-array-elements – 2010-10-25 03:01:52

回答

50

只是重新分配的元素,创造了一个中间变量,以节省您在写第一个:

var swapArrayElements = function(arr, indexA, indexB) { 
    var temp = arr[indexA]; 
    arr[indexA] = arr[indexB]; 
    arr[indexB] = temp; 
}; 
// You would use this like: swapArrayElements(myArray, 3, 7); 

如果你想使这个更容易使用,你甚至可以将其添加到内置阵列原型(如kennebec @建议);但是,请注意,这通常是一个糟糕的模式,以避免(因为这可能引起问题,当多个不同的库具有的内建的类型属于什么不同的想法):

Array.prototype.swap = function(indexA, indexB) { 
    swapArrayElements(this, indexA, indexB); 
}; 
// You would use this like myArray.swap(3, 7); 

请注意,此解决方案是显著更有效比使用splice()的替代方法要好。 (O(1)对O(n))。

+9

O(1)下面不是 – Nick 2014-04-05 18:34:49

5

您可以只使用一个临时变量左右移动的东西,例如:

var temp = this.myArray[3]; 
this.myArray[3] = this.myArray[7]; 
this.myArray[7] = temp; 

You can test it out here,或以函数形式:

Array.prototype.swap = function(a, b) { 
    var temp = this[a]; 
    this[a] = this[b]; 
    this[b] = temp; 
}; 

然后你只需要调用它像这样:

this.myArray.swap(3, 7); 

You can test that version here

75

从剪接的返回值是一个为被切除,

不需要的临时变量的元件(一个或多个)

Array.prototype.swapItems = function(a, b){ 
    this[a] = this.splice(b, 1, this[a])[0]; 
    return this; 
} 

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 

alert(arr.swapItems(3, 7)); 

返回值:(阵列)

0,1,2,7,4,5,6,3,8,9 
+1

尼斯!怎么没有人投票答复这个答案。 – zachzurn 2011-11-22 08:02:28

+0

理解该解决方案的关键是splice()可以在启动后具有其他项目,deleteCount将在拼接位置插入。只有一个缺陷:splice()返回一个数组,所以要从该数组中获得一个(也是唯一的)元素,就必须说:'this [a] = this.splice(b,1,this [a]) [0];' – trembl 2011-12-08 07:11:10

+13

考虑到这一点,splice是O(n),http://stackoverflow.com/questions/11514308/big-o-of-javascript-arrays – Nick 2014-04-05 18:33:51