JavaScript如何从对象数组中提取所有对象共有的键值对
实现方案
给定属性名完全一致的对象数组,要提取所有对象中值完全相同的公共键值对,可按以下逻辑实现:
- 边界处理:传入空数组时直接返回空对象
- 以数组第一个对象的键为遍历基准
- 逐个校验每个键在所有对象中的值是否完全一致
- 校验通过的键值对存入结果对象返回
示例输入
[ { a: 'foo', b: 'bar', c: 'zip' }, { a: 'urg', b: 'bar', c: 'zip' }, { a: 'foo', b: 'bar', c: 'zip' } ]
示例输出
{ b: 'bar', c: 'zip' }
上述结果中键a因在不同对象中存在不同值被过滤,b、c在所有对象中值完全一致,因此保留。
完整代码
function getCommonPairs(arr) { if (arr.length === 0) return {}; const res = {}; // 取第一个对象的所有键做遍历 const keys = Object.keys(arr[0]); for (const key of keys) { // 校验所有对象当前键的值是否和第一个对象对应值相等 const isAllSame = arr.every(item => item[key] === arr[0][key]); if (isAllSame) { res[key] = arr[0][key]; } } return res; } // 测试用例 const testArr = [ {a: 'foo', b: 'bar', c: 'zip'}, {a: 'urg', b: 'bar', c: 'zip'}, {a: 'foo', b: 'bar', c: 'zip'} ]; console.log(getCommonPairs(testArr)); // 输出 {b: 'bar', c: 'zip'}
注意事项
- 上述代码使用
===做值比较,仅适用于属性值为原始类型(字符串、数字、布尔值、null、undefined)的场景。如果属性值存在引用类型(数组、普通对象),需要替换为深比较逻辑,避免因引用地址不同导致判断失效。 - 本实现基于题目给出的「所有对象属性名完全一致」前提,如果实际场景中可能存在对象缺省属性的情况,可在校验逻辑中补充
item.hasOwnProperty(key)判断,避免把缺键当作值相等处理。
内容的提问来源于stack exchange,提问作者devinfd
相关产品推荐
相关产品推荐

