如何在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
相关产品推荐
相关产品推荐

