JavaScript保留数组对象指定属性的实现问题
解决数组对象仅保留指定属性的问题
嘿,我明白你现在的需求——要把数组里的每个对象都精简,只留下name和school这两个属性,而不是一个个手动删除不需要的属性对吧?你的当前方法只能删单个id,确实不够高效,我给你几个实用的方案:
推荐方案1:创建新对象(无副作用,更安全)
这种方法不会修改原数组里的对象,而是返回一个全新的过滤后的数组,符合现代JS编程风格,而且当listToKeep是动态数组时也完全适用:
var listToKeep = ['name', 'school']; var arrayOfObjects = [{id:'abc',name:'oh', school: 'a', sport: 'a'}, {id:'efg',name:'em', school: 'b', sport: 's'}, {id:'hij',name:'ge', school: 'c', sport: 'n'}]; const filteredArray = arrayOfObjects.map(obj => { const trimmedObj = {}; // 循环需要保留的属性,逐个添加到新对象 listToKeep.forEach(key => { // 可选:如果不确定原对象是否有该属性,可以加个判断 if (obj.hasOwnProperty(key)) { trimmedObj[key] = obj[key]; } }); return trimmedObj; }); console.log(filteredArray); // 输出结果: // [{name:'oh', school: 'a'}, {name:'em', school: 'b'}, {name:'ge', school: 'c'}]
方案2:解构赋值(属性固定时更简洁)
如果你的listToKeep属性是固定不变的,用解构赋值可以一行搞定,代码更简洁:
const filteredArray = arrayOfObjects.map(({ name, school }) => ({ name, school }));
方案3:修改原数组(不推荐,但按需使用)
如果你一定要直接修改原数组里的对象(不建议,可能带来意外副作用),可以先找出所有不需要的属性,再批量删除:
arrayOfObjects.forEach(obj => { // 获取所有不在保留列表里的属性 const keysToRemove = Object.keys(obj).filter(key => !listToKeep.includes(key)); // 批量删除这些属性 keysToRemove.forEach(key => delete obj[key]); }); // 此时原arrayOfObjects已经被修改,只保留name和school console.log(arrayOfObjects);
为什么不推荐逐个delete?
如果对象里有很多不需要的属性(比如示例里的id、sport,以后可能还有更多),逐个写delete会非常繁琐,而且直接修改原对象容易在其他地方引发意想不到的问题。创建新对象的方式更清晰、更安全。
内容的提问来源于stack exchange,提问作者Bonnard
相关产品推荐
相关产品推荐

