Javascript 在对象中的对象上使用Object.assign

Javascript 在对象中的对象上使用Object.assign,javascript,object,Javascript,Object,如何使用Object.assign更新allMsgs数组中的第二个对象 我有: let v = { allMsgs: [ { a: 111, b: [], }, { a: 222, b: [], } ] } 我想要一份v的副本,以便: let v = { allMsgs: [ { a: 111, b: [], }, {

如何使用Object.assign更新allMsgs数组中的第二个对象

我有:

let v = {
  allMsgs: [
    {
        a: 111,
        b: [],
    },

    {
        a: 222,
        b: [],
    }
  ]
}
我想要一份v的副本,以便:

let v = {
  allMsgs: [
    {
        a: 111,
        b: [],
    },

    {
        a: 222,
        b: ['newItem],
    }
  ]
}

如何使用Object.assign进行此操作?

只需选择要更新的零件即可

设v={
所有MSG:[
{
a:111,
b:[],
},
{
a:222,
b:[],
}
]
};
让vCopy={allMsgs:v.allMsgs.map(msg=>Object.assign({},msg))};
vCopy.allMsgs[1]=Object.assign(vCopy.allMsgs[1],{b:['newItem']});
console.log('copy',vCopy);

console.log('actual',v)如果目标不是改变原始对象,那么您可以这样做:

设v={
所有MSG:[
{a:111,b:[]},
{a:222,b:[]}
]
};
设w={allMsgs:Object.assign([…v.allMsgs],
{1:Object.assign({},v.allMsgs[1],
{b:['newItem']}
)}
)};
log('updated=',w);
log('original=',v)如果没有,您可以直接寻址数组并推送值

var v={allMsgs:[{a:111,b:[]},{a:222,b:[]}};
v、 allMsgs[1].b.push('newItem');
控制台日志(v)

作为控制台包装{max height:100%!重要;top:0;}
为什么
对象。assing