是否有更简单的方法来交换数组中的两个元素?
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;
当前回答
如果只需要交换第一个和最后一个元素:
array.unshift( array.pop() );
其他回答
下面是一个不会改变列表的一行代码:
let newList =对象。赋值([],列表,{[x]:列表[y], [y]:列表[x]})
(使用了2009年问题发布时还没有的语言功能!)
您只需要一个临时变量。
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]。这是解构赋值。
下面是一个变体,它首先检查数组中是否存在索引:
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;
}
如果索引不存在,它目前只会返回这个,但是您可以很容易地修改失败时的行为
只是为了好玩,另一种不使用任何额外变量的方法是:
Var arr = [1,2,3,4,5,6,7,8,9]; //交换索引0和2 arr (arr)。长度]= arr[0];//将idx1复制到数组的末尾 Arr [0] = Arr [2];//复制idx2到idx1 Arr [2] = Arr [Arr .length-1];//复制idx1到idx2 arr.length——;//删除idx1(被添加到数组的末尾) Console.log (arr);// -> [3,2,1,4,5,6,7,8,9]
当这个问题被问到时,它并不存在,但是ES2015引入了数组解构,允许你这样写:
let a = 1, b = 2;
// a: 1, b: 2
[a, b] = [b, a];
// a: 2, b: 1