我有一个这样的数组:
this.myArray = [0,1,2,3,4,5,6,7,8,9];
现在我要做的是,两个项目的交换位置给出了他们的位置。 例如,我想将项目4(即3)与项目8(即7)交换 这应该导致:
this.myArray = [0,1,2,7,4,5,6,3,8,9];
我怎样才能做到这一点?
答案 0 :(得分:95)
拼接的返回值是已删除的元素 -
不需要临时变量
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 :(得分:59)
只需重新分配元素,创建一个中间变量来保存您覆盖的第一个:
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)vs O(n))。
答案 2 :(得分: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);