javascript - 对象的变化是一成不变的吗?

标签 javascript immutability

我正在尝试扁平化和深度复制一个对象。

这是我尝试执行的示例:

const data = {
  firstObj: {
    data: 'Hi!',
    nestedArrayOfObject: [{
      name: 'hey',
      property: 'object'
    }],
  },
  secondObj: {
    name: 'second',
    nestedArray: []
  },
}

const object = {}
const keys = Object.keys(data)

for (let i = 0; i < keys.length; i += 1) {
  const items = Object.keys(data[keys[i]])

  for (let j = 0; j < items.length; j += 1) {
    object[items[j]] = data[keys[i]][items[j]]
  }
}

console.log(object)

据我了解,嵌套对象仅链接到新对象,但不克隆。

如何在没有额外库的情况下正确执行此操作?

最佳答案

您可以使用JSON.parse(JSON.stringify(obj))进行深度克隆

const data = {
  firstObj: {
    data: 'Hi!',
    nestedArrayOfObject: [{
      name: 'hey',
      property: 'object'
    }],
  },
  secondObj: {
    name: 'second',
    nestedArray: []
  },
}

const object = {}
const keys = Object.keys(data)

for (let i = 0; i < keys.length; i += 1) {
  const items = Object.keys(data[keys[i]])

  for (let j = 0; j < items.length; j += 1) {
    object[items[j]] = JSON.parse(JSON.stringify(data[keys[i]][items[j]]))
  }
}

console.log(object)

关于javascript - 对象的变化是一成不变的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55662130/

相关文章:

java - 在不可变类中创建一个字段 `Final`?

java - 使用不可变对象(immutable对象)模拟属性更改

javascript - 如何使用d3在散点图上一一绘制/添加节点?

javascript - Handlebars 增加档次

c# - 使用反射实例化不可变对象(immutable对象)

java - 字符串是不可变的。究竟是什么意思?

java - 为什么字符串在许多编程语言中都是不可变的?

javascript - 目录样式 URL 上的 PHP "Go to Parent Page"按钮

javascript - 正则表达式使用 javascript 验证 csv 格式的文本字段

javascript - 使用 'zero' 数据破解 d3 饼图