如何重复排序数组元素而不改变数组本身?

时间:2017-11-24 04:38:20

标签: javascript

我有数组const arr = [1,2,3,4] 我希望通过交换此数组中的数字对来获得4个不同的数组。 I. e。这个数组的结果将是:

1st:[2,1,3,4]

第二名:[1,3,2,4]

第3名:[1,2,4,3]

4rd:[4,2,3,1](交换第一个和最后一个元素)

我知道Object.assign有助于避免突变但不确定如何实施突变。

更多解释:

  1. 采取原始的arr
  2. 交换第一个数字对
  3. 返回[2,1,3,4]
  4. 重复

    1. 采取原始的arr
    2. 交换第二个数字对
    3. 返回[1,3,2,4]

1 个答案:

答案 0 :(得分:0)

对于任何给定的数组,您将生成一个以单交换为特征的数组数组。值得注意的是,这个数组数组与原始数组具有相同的长度(n),并且i th 数组交换元素i和(i + 1)%n。知道了,这是使用map,Object.assign和slice的解决方案:

[ 1, 2, 3, 4 ].map( ( element, index, arr ) =>
    Object.assign( arr.slice(), {
        [ index ]: arr[ ( index + 1 ) % arr.length ],
        [ ( index + 1 ) % arr.length ]: arr[ index ]
    } ) );

注意element未使用。