是否有更简单的方法来交换数组中的两个元素?
var a = list[x], b = list[y];
list[y] = a;
list[x] = b;
是否有更简单的方法来交换数组中的两个元素?
var a = list[x], b = list[y];
list[y] = a;
list[x] = b;
当前回答
如果你不想在ES5中使用临时变量,这是交换数组元素的一种方法。
var swapArrayElements = function (a, x, y) {
if (a.length === 1) return a;
a.splice(y, 1, a.splice(x, 1, a[y])[0]);
return a;
};
swapArrayElements([1, 2, 3, 4, 5], 1, 3); //=> [ 1, 4, 3, 2, 5 ]
其他回答
Array.prototype.swap = function(a, b) {
var temp = this[a];
this[a] = this[b];
this[b] = temp;
};
用法:
var myArray = [0,1,2,3,4...];
myArray.swap(4,1);
您只需要一个临时变量。
var b = list[y];
list[y] = list[x];
list[x] = b;
10年后,随着ES6的大量采用,编辑劫持了最重要的答案:
给定数组arr =[1,2,3,4],你现在可以在一行中交换值,如下所示:
[arr[0], arr[1]] = [arr[1], arr[0]];
这将产生数组[2,1,3,4]。这是解构赋值。
好吧,你不需要缓冲两个值-只有一个:
var tmp = list[x];
list[x] = list[y];
list[y] = tmp;
下面是一个变体,它首先检查数组中是否存在索引:
Array.prototype.swapItems = function(a, b){
if( !(a in this) || !(b in this) )
return this;
this[a] = this.splice(b, 1, this[a])[0];
return this;
}
如果索引不存在,它目前只会返回这个,但是您可以很容易地修改失败时的行为
交换数组中两个连续的元素
array.splice(IndexToSwap,2,array[IndexToSwap+1],array[IndexToSwap]);