如何在JavaScript中为对象数组中缺失指定属性的对象添加属性
如何给JavaScript对象数组中缺失指定属性的对象添加属性
嘿,你的需求很明确——给对象数组里没有value属性的对象补上value: null对吧?先看看你写的代码,逻辑是没问题的,但有个小细节:forEach方法本身不会返回任何值(它的返回值是undefined),所以你把它赋值给result的话,result会是undefined,而原数组arrobj其实已经被修改了。
下面给你两种实用的实现方案:
方案1:直接修改原数组(你的思路优化)
如果你不介意改动原数组,你的代码只需要去掉多余的赋值,直接执行遍历即可:
var arrobj = [ {id:1, name: "ram", value: 100}, {id:2, name: "ben", value: 100}, {id:3, name: "laks"} ]; // 遍历数组,给缺失value的对象补全属性 arrobj.forEach(e => { if (!e.hasOwnProperty("value")) { e.value = null; } }); console.log(arrobj); // 输出符合预期:[ {id:1, name: "ram", value: 100}, {id:2, name: "ben", value: 100}, {id:3, name: "laks", value: null} ]
方案2:创建新数组(不修改原数组,更推荐)
如果希望保留原数组不变,建议用map方法生成新数组,这是更符合函数式编程的安全写法:
var arrobj = [ {id:1, name: "ram", value: 100}, {id:2, name: "ben", value: 100}, {id:3, name: "laks"} ]; const result = arrobj.map(e => { // 用扩展运算符复制原对象属性,补全缺失的value return e.hasOwnProperty("value") ? e : {...e, value: null}; }); console.log(result); // 预期输出:[ {id:1, name: "ram", value: 100}, {id:2, name: "ben", value: 100}, {id:3, name: "laks", value: null} ] console.log(arrobj); // 原数组完全不变:[ {id:1, name: "ram", value: 100}, {id:2, name: "ben", value: 100}, {id:3, name: "laks"} ]
这里用hasOwnProperty判断属性是否存在是更严谨的选择,它只会检查对象自身的属性,不会涉及原型链上的继承属性,刚好匹配你的场景。
内容的提问来源于stack exchange,提问作者code123
相关产品推荐
相关产品推荐

