是否有更简单的方法来交换数组中的两个元素?
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;
当前回答
你可以交换任意数量的对象或文字,甚至是不同类型的对象或文字,使用一个简单的恒等函数,如下所示:
var swap = function (x){return x};
b = swap(a, a=b);
c = swap(a, a=b, b=c);
针对你的问题:
var swap = function (x){return x};
list[y] = swap(list[x], list[x]=list[y]);
这在JavaScript中是可行的,因为它接受额外的参数,即使它们没有声明或使用。赋值a=b等,发生在a被传递到函数之后。
其他回答
您只需要一个临时变量。
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]。这是解构赋值。
使用ES6可以这样做…
假设你有这两个数组……
const a = ["a", "b", "c", "d", "e"];
const b = [5, 4, 3, 2, 1];
你想交换第一个值:
const [a0] = a;
a[0] = b[0];
b[0] = a0;
和值:
a; //[5, "b", "c", "d", "e"]
b; //["a", 4, 3, 2, 1]
var a = [1,2,3,4,5], b=a.length;
for (var i=0; i<b; i++) {
a.unshift(a.splice(1+i,1).shift());
}
a.shift();
//a = [5,4,3,2,1];
当这个问题被问到时,它并不存在,但是ES2015引入了数组解构,允许你这样写:
let a = 1, b = 2;
// a: 1, b: 2
[a, b] = [b, a];
// a: 2, b: 1
根据Metafilter上的某个人的说法, “最新版本的Javascript允许你更整洁地进行交换(以及其他事情):”
[ list[x], list[y] ] = [ list[y], list[x] ];
我的快速测试表明,这段python代码在JavaScript版本中运行良好 目前在“谷歌Apps Script”(“.gs”)中使用。 遗憾的是,进一步的测试表明这段代码给出了一个“Uncaught ReferenceError: Invalid left side in assignment.” 使用的JavaScript (".js")的任何版本 谷歌Chrome版本24.0.1312.57 m。