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

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

当前回答

试试这个功能…

$(document).ready(function () { var pair = []; var destinationarray = ['AAA','BBB','CCC']; var cityItems = getCityList(destinationarray); for (var i = 0; i < cityItems.length; i++) { pair = []; var ending_point = ""; for (var j = 0; j < cityItems[i].length; j++) { pair.push(cityItems[i][j]); } alert(pair); console.log(pair) } }); function getCityList(inputArray) { var Util = function () { }; Util.getPermuts = function (array, start, output) { if (start >= array.length) { var arr = array.slice(0); output.push(arr); } else { var i; for (i = start; i < array.length; ++i) { Util.swap(array, start, i); Util.getPermuts(array, start + 1, output); Util.swap(array, start, i); } } } Util.getAllPossiblePermuts = function (array, output) { Util.getPermuts(array, 0, output); } Util.swap = function (array, from, to) { var tmp = array[from]; array[from] = array[to]; array[to] = tmp; } var output = []; Util.getAllPossiblePermuts(inputArray, output); return output; } <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

其他回答

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;
}

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

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;
}

如果索引不存在,它目前只会返回这个,但是您可以很容易地修改失败时的行为

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

只是为了好玩,另一种不使用任何额外变量的方法是:

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]

这是一个精简版 arr中i1和i2的值互换

arr.slice(0,i1).concat(arr[i2],arr.slice(i1+1,i2),arr[i1],arr.slice(i2+1))