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

如何通过指定键数组过滤JavaScript对象生成目标新对象?

实现按指定键数组过滤JavaScript对象的方法

当然有啦!你可以通过多种简洁的方式实现这个需求,下面是几个常用且实用的方案:

方法1:使用Array.reduce()(灵活且兼容性好)

reduce方法非常适合这种逐步构建新对象的场景,还能方便地添加额外的校验逻辑:

const originalObj = {
  apple: { color: 'red' },
  orange: { color: 'orange' },
  mango: { color: 'yellow' },
  jackfruit: { color: 'green' }
};
const keepKeys = ['mango', 'apple'];

const filteredObj = keepKeys.reduce((accumulator, key) => {
  // 可选:检查原对象是否真正拥有该键,避免意外引入undefined
  if (originalObj.hasOwnProperty(key)) {
    accumulator[key] = originalObj[key];
  }
  return accumulator;
}, {});

console.log(filteredObj);
// 输出结果:{ mango: { color: 'yellow' }, apple: { color: 'red' } }

方法2:使用Object.fromEntries() + Array.filter()(简洁现代)

如果你使用的是ES2019及以上的环境,这个组合会让代码非常简洁:

const originalObj = {
  apple: { color: 'red' },
  orange: { color: 'orange' },
  mango: { color: 'yellow' },
  jackfruit: { color: 'green' }
};
const keepKeys = ['mango', 'apple'];

const filteredObj = Object.fromEntries(
  // 先把对象转成键值对数组,再筛选出目标键的项,最后转回对象
  Object.entries(originalObj).filter(([key]) => keepKeys.includes(key))
);

console.log(filteredObj);
// 输出结果和上面一致

方法3:手动遍历(适合理解基础逻辑)

如果你想更直观地控制整个过程,手动遍历目标键数组也是个不错的选择:

const originalObj = {
  apple: { color: 'red' },
  orange: { color: 'orange' },
  mango: { color: 'yellow' },
  jackfruit: { color: 'green' }
};
const keepKeys = ['mango', 'apple'];

const filteredObj = {};
for (const key of keepKeys) {
  // 检查原对象是否存在该键,避免无效赋值
  if (originalObj[key]) {
    filteredObj[key] = originalObj[key];
  }
}

console.log(filteredObj);

小提示

  • 如果你的目标键数组里可能存在原对象没有的键,记得加上hasOwnProperty或者存在性检查,避免新对象里出现undefined的键值对。
  • 上面的方法都会保留目标键在数组里的顺序,和你预期的结果一致。

内容的提问来源于stack exchange,提问作者PranavPinarayi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:58:07