将对象添加到深层嵌套的对象

时间:2017-06-09 16:07:34

标签: 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',
    },        
  },
}

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

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次来电来完成此任务?

2 个答案:

答案 0 :(得分:2)

您可以使用spread运算符语法和

来执行此操作

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)

答案 1 :(得分:0)

Object.assign(state.meta.data,{hello:"world"});

console.log(state);

您正在克隆树的每个对象,这是不必要的或可以使用JSON完成:

var cloned=JSON.parse(JSON.stringify(state));
Object.assign(cloned,{hello:"world"});