是否有更简单的方法来交换数组中的两个元素?

var a = list[x], b = list[y];
list[y] = a;
list[x] = b;

当前回答

下面是一个变体,它首先检查数组中是否存在索引:

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.unshift( array.pop() );

那么Destructuring_assignment呢

var arr = [1, 2, 3, 4]
[arr[index1], arr[index2]] = [arr[index2], arr[index1]]

还可以推广到

[src order elements] => [dest order elements]

好吧,你不需要缓冲两个值-只有一个:

var tmp = list[x];
list[x] = list[y];
list[y] = tmp;

当这个问题被问到时,它并不存在,但是ES2015引入了数组解构,允许你这样写:

let a = 1, b = 2;
// a: 1, b: 2
[a, b] = [b, a];
// a: 2, b: 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]。这是解构赋值。