如何向对象添加键值对?数组键值合并到对象的正确方法求助
如何将数组中的键值对添加到对象中?
先帮你梳理下原代码里的问题,再一步步给出正确的实现方式:
原代码的问题
- 语法错误:
person对象中Name和age属性之间缺少逗号,这会直接导致JS解析报错;address数组里的对象引号不匹配({address: '111 main st"}应该修正为{ address: '111 main st' });forEach的箭头函数语法错误,写成了,==>,正确写法是=>。
- 逻辑错误:
for (let obj in person)遍历的是person的属性名(比如"Name"、"age",都是字符串),不是对象,所以你尝试给obj[key]赋值完全不成立;- 逻辑方向搞反了——你要把
address数组里的键值对加到person里,但原代码却在遍历person的属性去操作,而且element.key也不对,address里的对象键是address,不是key。
正确的实现方法
假设你的需求是把address数组中所有对象的键值对都合并到person对象中,这里有两种常用方式:
方式1:直接修改原person对象(使用Object.assign)
先修正基础语法,再用forEach遍历address数组,把每个地址对象的属性合并到person里:
const person = { Name: "John klmeni", age: 29 }; const address = [{ address: '111 main st' }]; // 遍历address数组,合并每个对象的属性到person address.forEach(addrItem => { Object.assign(person, addrItem); }); console.log(person); // 输出:{ Name: 'John klmeni', age: 29, address: '111 main st' }
方式2:返回新对象,不修改原person(使用展开运算符)
如果你不想改动原有的person对象,可以用展开运算符结合reduce生成一个新的合并对象:
const person = { Name: "John klmeni", age: 29 }; const address = [{ address: '111 main st' }]; const updatedPerson = address.reduce((result, addrItem) => { return { ...result, ...addrItem }; }, person); console.log(updatedPerson); // 输出合并后的新对象,原person保持不变
如果address数组里有多个地址对象,这两种方式都会把所有对象的属性依次合并到目标对象中(后面的属性会覆盖前面同名的属性)。
内容的提问来源于stack exchange,提问作者hussain
相关产品推荐
相关产品推荐

