是否有更简单的方法来交换数组中的两个元素?
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;
当前回答
那么Destructuring_assignment呢
var arr = [1, 2, 3, 4]
[arr[index1], arr[index2]] = [arr[index2], arr[index1]]
还可以推广到
[src order elements] => [dest order elements]
其他回答
在没有临时变量或ES6交换方法的数组中交换第一个和最后一个元素[a, b] = [b, a]
[a.pop(),…a.slice(1), a.shift()]
交换数组中两个连续的元素
array.splice(IndexToSwap,2,array[IndexToSwap+1],array[IndexToSwap]);
下面是一个变体,它首先检查数组中是否存在索引:
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;
}
如果索引不存在,它目前只会返回这个,但是您可以很容易地修改失败时的行为
如果你不想在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 ]
下面是一个不会改变列表的一行代码:
let newList =对象。赋值([],列表,{[x]:列表[y], [y]:列表[x]})
(使用了2009年问题发布时还没有的语言功能!)