javascript - 将对象添加到深层嵌套对象

标签 javascript ecmascript-6

假设我有一个如下所示的对象:

const state = {
  meta: {
    attrs: [ 'dude' ],
    data: {
      foo: 'bar',
      stuff: [
        'x',
        'y',
      ]
    },
  },
}

我想将一个对象作为子对象添加到 data 属性中,创建以下内容:

const state = {
  meta: {
    attrs: [ 'dude' ],
    data: {
      foo: 'bar',
      stuff: [
        'x',
        'y',
      ],
      hello: 'world',
    },        
  },
}

请注意,在 data 对象中添加 hello: 'world' 作为子项:

hello world as child

使用Object.assign我知道我可以通过这种方式完成我的任务:

const hello = {
  hello: 'world',
}
const data = Object.assign(
  {},
  state.meta.data,
  hello,
)
const meta = Object.assign(
  {},
  state.meta,
  {
    data,
  },
)
const updatedState = Object.assign(
  {},
  state,
  {
    meta,
  },
)

是否可以使用更少的 Object.assign 调用来完成此任务?

最佳答案

您可以使用扩展运算符语法以及

const state = {
  meta: {
    attrs: [ 'dude' ],
    data: {
      foo: 'bar',
      stuff: [
        'x',
        'y',
      ]
    },
  },
}

var data = {
    ...state, meta: {
        ...state.meta, data: {
            ...state.meta.data, hello: 'world'
        }
      }
}

console.log(data)

关于javascript - 将对象添加到深层嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44462320/

相关文章:

javascript - 如何使用 ES6 语法从库模块构造新类?

javascript/angularjs - 淡出

ecmascript-6 - Babel 生成代码导致错误exports is undefined

javascript - 你如何检查 ECMAScript 6 类和函数之间的区别?

javascript - 我应该为 Building library 选择哪个? ES5 或 ES6

javascript - 页面加载后显示弹出窗口

javascript - 使用$route获取URL参数

javascript - “alert”是未定义的 JavaScript 运行时错误

javascript - JS 跳出函数

javascript - 合并两个对象并增加 ECMAScript 6 中的键