Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象添加到深度嵌套的对象_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 将对象添加到深度嵌套的对象

Javascript 将对象添加到深度嵌套的对象,javascript,ecmascript-6,Javascript,Ecmascript 6,假设我有一个如下所示的对象: const state = { meta: { attrs: [ 'dude' ], data: { foo: 'bar', stuff: [ 'x', 'y', ] }, }, } 我想将一个对象作为子对象添加到data属性中,创建以下内容: const state = { meta: { attrs: [ 'dude' ], data: {

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

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”

使用
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(state.meta.data,{hello:"world"});

console.log(state);
您正在克隆树的每个对象,这是不必要的,或者可以使用JSON完成:

var cloned=JSON.parse(JSON.stringify(state));
Object.assign(cloned,{hello:"world"});
您正在克隆树的每个对象,这是不必要的,或者可以使用JSON完成:

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

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

const state={
元:{
属性:[“都德”],
数据:{
福:“酒吧”,
材料:[
“x”,
“y”,
]
},
},
}
风险值数据={
…状态,元:{
…state.meta,数据:{
…state.meta.data,您好:'世界'
}
}
}

console.log(data)
您可以使用扩展运算符语法以及

const state={
元:{
属性:[“都德”],
数据:{
福:“酒吧”,
材料:[
“x”,
“y”,
]
},
},
}
风险值数据={
…状态,元:{
…state.meta,数据:{
…state.meta.data,您好:'世界'
}
}
}

console.log(data)
state.meta.data.hello='world'
?我想尝试不改变对象,而是返回一个新的
state.meta.data.hello='world'
?我想尝试不改变对象,而是返回一个新的one@andrewli我不是舒尔OP想要的。下面的人做他想做的事expects@andrewli我不是舒尔OP想要的。下面的人做他期望的事