能否在复制对象数组的同时为其对象添加自定义属性?
如何一步完成数组赋值同时为对象添加属性?
假设有如下对象数组:
const myArr = [ {name: 'one'}, {name: 'two'} ];
你当前的两步实现代码:
const copyArr = myArr; copyArr.forEach(obj => obj.newProp = 'some-new-prop');
执行后结果为:
[ {name: 'one', newProp: 'some-new-prop'}, {name: 'two', newProp: 'some-new-prop'} ]
可以一步完成,分两种场景处理:
场景1:直接修改原数组对象(和两步效果完全一致)
利用逗号运算符将属性修改操作和数组赋值合并成一行:
const copyArr = (myArr.forEach(obj => obj.newProp = 'some-new-prop'), myArr);
逗号运算符会先执行forEach给每个对象添加属性,再把原数组的引用赋值给copyArr,最终copyArr和myArr指向同一个数组,原对象也会被修改。
场景2:生成新数组和新对象(不修改原数据)
如果不想影响原数组和原对象,推荐用map方法创建全新数组,同时生成带新属性的对象浅拷贝:
const copyArr = myArr.map(obj => ({ ...obj, newProp: 'some-new-prop' }));
执行后原myArr保持不变,copyArr是独立的新数组,每个对象都是原对象的副本并新增了newProp属性。
内容的提问来源于stack exchange,提问作者physicsboy
相关产品推荐
相关产品推荐

