JavaScript对比对象属性值与另一对象键返回匹配键值对方法
对象属性键值匹配提取实现方案
给定基础数据
const obj1 = { "list": [ { sequence: { id: '6543' } }, { sequence: { id: '5667' } }, { sequence: { id: '7899' } } ] } const obj2 = { "id": "alias", "value": { "6543": "Htayu", "1456": "dfwd" } }
需求说明
- 遍历
obj1.list数组中每一项的sequence.id属性值 - 将取出的id值与
obj2.value的所有属性键逐一对比 - 匹配成功时提取
obj2.value中对应的键值对,最终返回由匹配项组成的数组 - 示例场景下仅id
6543匹配,预期返回结果为[{"6543": "Htayu"}],同时输出匹配日志obj1 6543 = obj2 6543
原有代码问题
obj2是普通对象而非数组,直接调用数组方法.find()会触发运行报错- 仅获取了
obj2.value的键列表,没有实现和obj1中id的匹配逻辑,也没有组装最终要求的结果结构
可直接运行的实现代码
const requiredValue = []; const valueMap = obj2.value; obj1.list.forEach(item => { const matchId = item.sequence.id; // 校验当前id是否在valueMap中存在对应键 if (Object.hasOwn(valueMap, matchId)) { requiredValue.push({ [matchId]: valueMap[matchId] }); console.log(`obj1 ${matchId} = obj2 ${matchId}`); } });
注:如果运行环境不支持
Object.hasOwn(ES2022新增API),可以替换为Object.prototype.hasOwnProperty.call(valueMap, matchId)实现相同的属性存在性校验,避免原型链属性干扰。
运行结果
执行代码后控制台输出:
obj1 6543 = obj2 6543
requiredValue变量值为:
[{"6543": "Htayu"}]
和预期结果完全一致。
内容的提问来源于stack exchange,提问作者Bhagya Swamy
相关产品推荐
相关产品推荐

