【问题标题】:Array of arrays being mutated with slice, spread, and map使用 slice、spread 和 map 进行变异的数组数组
【发布时间】:2019-02-28 23:40:21
【问题描述】:

有人问过这个问题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

【问题讨论】:

标签: javascript arrays


【解决方案1】:

你可以递归地做到这一点

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

【讨论】:

    【解决方案2】:

    尝试使用JSON 方法:

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

    【讨论】:

      【解决方案3】:

      我刚刚找到this,它似乎解决了这个问题。

      我被 JSON.parse 抛弃了。

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

      【讨论】:

      • 是的,序列化/反序列化应该重新创建所有对象。
      猜你喜欢
      • 2017-08-04
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      相关资源
      最近更新 更多