You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:38:45