每次交换2个值时如何返回新数组?

时间:2017-12-19 01:28:52

标签: javascript

我正在进行一些测验,我有一个看起来像这样的数组:let a = [1, 3, 4, 2]

现在我想知道如何创建一个循环,返回三个带有2个交换值的新数组,即:(a[i] swapped with a[i+1]

我希望得到以下3个数组:

  1. [3,1,4,2]
  2. [1,4,3,2]
  3. [1,3,2,4]
  4. 为此创建循环的方法是什么?我一直在尝试使用map函数循环数组并交换值,但发现我只是让自己感到困惑。任何建设性的方法/解决方案以及对此测验的解释都将不胜感激。

2 个答案:

答案 0 :(得分:2)

循环中的地图是你应该需要的全部



let a = [1, 3, 4, 2];
let r = [];
for (let i = 0; i < a.length - 1; i++) {
    r[i] = a.map((v, index) => {
        if(index == i) return a[i+1];
        if(index == i + 1) return a[i];
        return v;
    });
}
console.log(r);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

使用简单的for循环:

&#13;
&#13;
let a = [1, 3, 4, 2],
    result = [];

for(let i = 0; i < a.length - 1; i++) {     // notice that the loop ends at 1 before the last element
    let copy = a.slice(0);                  // copy the array
    let temp = copy[i];                     // do the swaping
    copy[i] = copy[i + 1];
    copy[i + 1] = temp;
    result.push(copy);                      // add the array to result
}

console.log(result);
&#13;
&#13;
&#13;