了解JS中的传播算子

时间:2018-12-06 22:51:47

标签: javascript arrays operator-keyword spread-syntax

所以我尝试了一个简单的例子:

  const original = [
     {id: 0, color: "red"},
     {id: 1, color: "blue"}
      ]
  const copy = [...original]

  copy[0] = {id:2, color:"red"}
  copy[1].id = 2
  console.log(original)
  console.log(copy)

我得到的结果令人困惑:

   Array [Object { id: 0, color: "red" }, Object { id: 2, color: "blue" }]
   Array [Object { id: 2, color: "red" }, Object { id: 2, color: "blue" }]

当我更改整个对象时,更改仅发生在复制数组中。

那么为什么copy [1] .id = 2实际上也改变了原始数组,而不仅仅是复制数组中的键?

1 个答案:

答案 0 :(得分:0)

这个问题的答案完全取决于您copy的意思。由于复制可以是浅的,深的,并且介于两者之间。如果您只是想使用对象的 shallow 克隆创建一个新数组,则可以使用map进行传播。例如:

const copy = original.map(item => ({ ...item }))