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

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

当前回答

在没有临时变量或ES6交换方法的数组中交换第一个和最后一个元素[a, b] = [b, a]

[a.pop(),…a.slice(1), a.shift()]

其他回答

根据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。

如果只需要交换第一个和最后一个元素:

array.unshift( array.pop() );

交换数组中两个连续的元素

array.splice(IndexToSwap,2,array[IndexToSwap+1],array[IndexToSwap]);
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];

Typescript解决方案,克隆数组,而不是突变现有的

export function swapItemsInArray<T>(items: T[], indexA: number, indexB: number): T[] {
  const itemA = items[indexA];

  const clone = [...items];

  clone[indexA] = clone[indexB];
  clone[indexB] = itemA;

  return clone;
}