如何在JavaScript中过滤对象数组,仅保留所有对象值相同的属性?
提取数组中所有对象共有的相同键值对
给定包含多个对象的数组,我们需要筛选出所有对象里属性值完全一致的键值对,返回对应的结果对象。以下是具体实现方案:
实现代码
const myArr = [ { name: "john", id: 1, age:10 }, { name: "john", id: 2, age:10 }, { name: "mary", id: 3, age:10 } ]; function getSharedProperties(arr) { // 处理空数组边界情况 if (!arr.length) return {}; // 以数组第一个对象为基准 const base = arr[0]; const result = {}; // 遍历基准对象的所有属性键 for (const key of Object.keys(base)) { // 校验所有对象的该属性值是否与基准值一致 const isShared = arr.every(item => item[key] === base[key]); if (isShared) { result[key] = base[key]; } } return result; } // 测试调用 console.log(getSharedProperties(myArr)); // 输出: { age: 10 }
代码说明
- 先处理空数组的特殊情况,直接返回空对象
- 取数组第一个对象作为基准,减少不必要的键遍历次数
- 用
Object.keys()获取基准对象的所有属性名 - 通过
Array.every()批量校验每个属性在所有对象中的值是否统一 - 收集所有符合条件的键值对到结果对象中
该实现同样适配数组中对象属性数量不一致的场景——只要某个属性在所有对象中存在且值相同,就会被保留到结果里。
内容的提问来源于stack exchange,提问作者New 14
相关产品推荐
相关产品推荐

