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

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中对应的键值对,最终返回由匹配项组成的数组
  • 示例场景下仅id6543匹配,预期返回结果为[{"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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:03:26