使用切片,散布和贴图变异的阵列数组

时间:2019-02-28 23:40:22

标签: javascript arrays

已经here,更重要的是here提出了这个问题。我尝试了所有答案,但没有一个解决了我的问题。这是非常基本的。

我有以下数组。进行拼接或执行任何破坏性操作后,我进行的各种尝试都不会持久。甚至副本都是突变的。我该如何复制它以便原始版本继续存在?

var arrs = [ [ 3 ], [ 7, 4 ], [ 2, 4, 6 ], [ 8, 5, 9, 3 ] ]

var arrsCopy1 = arrs.slice()

var arrsCopy2 = arrs.map(arr => {
  return arr
})

var arrsCopy3 = [...arrs]


//test one of the copies
arrsCopy3.forEach(arr => {
  return arr.splice(0, arr.length)
})
arrs, arrsCopy1, arrsCopy2, arrsCopy3 => [[],[],[],[]]

Here是一个小提琴,它演示了我的问题(使用reverse()而不是splice

3 个答案:

答案 0 :(得分:2)

您可以递归进行

const copyArr = (element) => {
    //If the element is a primitive
    if (element !== Object(element)) {
        return element;
    //The element is an array
    } else {
        return element.map(subelement => copyArr(subelement));
    }
}

答案 1 :(得分:0)

尝试使用JSON方法:

var arrCopy = JSON.parse(JSON.stringify(arr));

答案 2 :(得分:0)

我刚发现this,而且似乎可以解决问题。

我被抛弃了JSON.parse

var clonedArray = JSON.parse(JSON.stringify(originalArray));