如何通过 id 将对象与 jquery 合并

Posted

技术标签:

【中文标题】如何通过 id 将对象与 jquery 合并【英文标题】:How to merge object with jquery by id 【发布时间】:2021-09-26 08:45:33 【问题描述】:

我需要能够连接两个 javascript 对象,如下所示:

let arr1 = [
              "0":  id: "abdc4051", date: "2017-01-24" ,
              "1":  id: "abdc4052", date: "2017-01-22" 
           ];
let arr2 = [
              "0":  category: "Sport", data: code: "abdc4051", name: "ab"  ,
              "1":  category: "Others", data: code: "abdc4052", name: "abc"  
           ];

有没有人有这方面的脚本或知道这样做的内置方法? 我希望将日期添加到 arr2 上的数据中,条件代码等于 id

【问题讨论】:

欢迎来到 SO!你试过什么?你在哪里失败了? 你能在这里告诉你你在期待什么吗?您的预期输出是什么? 为什么你的对象有顺序的初始属性? "0": ..., "1": ... 【参考方案1】:

您的对象形状使这比应有的更难。您确定要每个对象中的顺序属性,还是记录/不良解析的产物?

如果你真的需要它们,你需要解决它们,在下面的 sn-p 中使用 Object.values()arr1 创建一个 Map,并在最后的 map() 调用中使用 Object.entries()arr2 上存储顺序键,然后在合并逻辑后的返回中重新引入。

const
  arr1 = [ "0":  id: "abdc4051", date: "2017-01-24"  ,  "1":  id: "abdc4052", date: "2017-01-22"  ],
  arr2 = [ "0":  category: "Sport", data:  code: "abdc4051", name: "ab"   ,  "1":  category: "Others", data:  code: "abdc4052", name: "abc"   ],

  // create map of dates: Map(2)  'abdc4051' => '2017-01-24', 'abdc4052' => '2017-01-22' 
  dateMap = new Map(arr1.map(o => 
    const [ id, date ] = Object.values(o);
    return [id, date];
  )),
  
  // map over arr2, get date from Map and add it to 'data' if it exists
  result = arr2.map(o => 
    const [[k, _o]] = Object.entries(o);
    const date = dateMap.get(_o.data.code);
    return 
      [k]: 
        ..._o,
        data:  ..._o.data, ...(date ?  date  : ) 
      
    ;
  );

console.log(result);
.as-console-wrapper  max-height: 100% !important; top: 0; 

如果您不需要初始顺序键,则合并变得不那么冗长。

const
  arr1 = [ id: "abdc4051", date: "2017-01-24" ,  id: "abdc4052", date: "2017-01-22" ],
  arr2 = [ category: "Sport", data:  code: "abdc4051", name: "ab"  ,  category: "Others", data:  code: "abdc4052", name: "abc"  ],

  dateMap = new Map(arr1.map(o => [o.id, o.date])),

  result = arr2.map(o => (
    
      ...o,
      data:  ...o.data, ...(dateMap.has(o.data.code) ?  date: dateMap.get(o.data.code)  : ) 
    
  ));

console.log(result)
.as-console-wrapper  max-height: 100% !important; top: 0; 

【讨论】:

以上是关于如何通过 id 将对象与 jquery 合并的主要内容,如果未能解决你的问题,请参考以下文章

如何将具有相同属性的对象合并到一个数组中?

如何通过 id 合并多个列表并获取特定数据?

JQuery使用JQuery 合并两个 json 对象

如何通过与id进行比较来合并三个不同的数组?在Angular 6中

如何将两个表与对应相同id号的相同行数合并在一起?

如何将 JavaScript 类实例与对象合并?