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

如何在JavaScript中根据数组指定的键过滤对象键值对

根据指定键名数组过滤对象的键值对

给定存储键名的数组和目标对象,需要保留对象中键名存在于数组中的键值对,示例代码如下:

const arr = ['A', 'B', 'C', 'D', 'E'];
const obj = {
  A: 'test1',
  B: 'test2',
  F: 'test3',
  G: 'test4'
}

预期输出:

{
  A: 'test1',
  B: 'test2',
}

以下是几种实用的实现方法:

方法一:Object.fromEntries + Object.entries(现代简洁写法)

利用ES2019引入的API快速完成转换与过滤:

const filteredObj = Object.fromEntries(
  Object.entries(obj).filter(([key]) => arr.includes(key))
);

逻辑说明:

  • Object.entries(obj) 将对象转为[键, 值]格式的二维数组
  • filter 筛选出键存在于arr中的项
  • Object.fromEntries 把筛选后的二维数组转回对象

方法二:遍历数组构建新对象(直观易懂)

手动控制每个步骤,适合需要清晰逻辑的场景:

const filteredObj = {};
for (const key of arr) {
  if (obj.hasOwnProperty(key)) {
    filteredObj[key] = obj[key];
  }
}

逻辑说明:

  • 初始化空对象存储结果
  • 遍历数组键名,用hasOwnProperty检查原对象是否包含该键(避免继承属性干扰)
  • 存在对应键则将键值对添加到结果对象

方法三:reduce函数(函数式风格)

用数组的reduce方法累积出目标对象:

const filteredObj = arr.reduce((acc, key) => {
  if (obj[key] !== undefined) {
    acc[key] = obj[key];
  }
  return acc;
}, {});

逻辑说明:

  • 以空对象作为初始累积值acc
  • 遍历数组键名,若原对象中该键对应值不为undefined,则添加到acc
  • 每次迭代返回更新后的累积值,最终得到过滤后的对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:51:03