有没有更简单的方法来交换数组中的两个元素?
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 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]
。这是解构赋值。
如果您想要使用原生 javascript 的单个表达式,请记住拼接操作的返回值包含已删除的元素。
var A = [1, 2, 3, 4, 5, 6, 7, 8, 9], x= 0, y= 1;
A[x] = A.splice(y, 1, A[x])[0];
alert(A); // alerts "2,1,3,4,5,6,7,8,9"
编辑:
的[0]
是在表达的端部必要Array.splice()
的阵列的回报,并且在这种情况下,我们所需要的返回数组中的单个元件。
这似乎没问题....
var b = list[y];
list[y] = list[x];
list[x] = b;
但是使用
var b = list[y];
意味着b变量将存在于范围的其余部分。这可能会导致内存泄漏。不太可能,但还是最好避免。
把它放到 Array.prototype.swap 中也许是个好主意
Array.prototype.swap = function (x,y) {
var b = this[x];
this[x] = this[y];
this[y] = b;
return this;
}
可以这样调用:
list.swap( x, y )
这是一种避免内存泄漏和DRY的干净方法。
根据Metafilter上的一些随机人员的说法,“最近版本的 Javascript 允许您更巧妙地进行交换(除其他外):”
[ list[x], list[y] ] = [ list[y], list[x] ];
我的快速测试表明,此Pythonic 代码在“Google Apps Script”(“.gs”)中当前使用的 JavaScript 版本中运行良好。唉,进一步的测试表明此代码给出了“未捕获的引用错误:赋值中的左侧无效”。在 Google Chrome 版本 24.0.1312.57 m 使用的任何版本的 JavaScript(“.js”)中。
好吧,您不需要缓冲两个值 - 只有一个:
var tmp = list[x];
list[x] = list[y];
list[y] = tmp;