【问题标题】:How to merge two arrays of objects based on a value如何根据值合并两个对象数组
【发布时间】:2021-09-12 01:39:24
【问题描述】:

如你所见,我有两个对象:

let arrObj1 = [{"ID":5045,"unread":1},{"ID":5058,"unread":2}];
let arrObj2 = [{"ID":3006,"id":"818", "From":"user1@mail.com"},{"ID":5045,"id":"2503", "From":"user2@mail.com"},{"ID":5058,"id":"2509", "From":"user3@mail.com"}];

我想合并这两个对象数组并希望结果如下:

result = [{"ID":3006,"id":"818", "From":"user1@mail.com", "unread":0},{"ID":5045,"id":"2503", "From":"user2@mail.com", "unread":1},{"ID":5058,"id":"2509", "From":"user3@mail.com", "unread":2}]

如果在 arrObj1 中找不到来自 arrObj2 的 ID,则添加“未读”:0 谁能帮帮我

非常感谢

【问题讨论】:

    标签: javascript arrays object merge


    【解决方案1】:

    const 
      arrObj1 = [{"ID":5045,"unread":1},{"ID":5058,"unread":2}],
      arrObj2 = [{"ID":3006,"id":"818", "From":"user1@mail.com"},{"ID":5045,"id":"2503", "From":"user2@mail.com"},{"ID":5058,"id":"2509", "From":"user3@mail.com"}];
    
    // get map of ID as key and unread as value from arrObj1
    const IdUnreadMap = arrObj1.reduce((map, { ID, unread }) => 
      map.set(ID, unread)
    , new Map);
    // iterate over arrObj2 and set unread from map or 0
    const merged = arrObj2.map(item => {
      const unread = IdUnreadMap.get(item.ID) || 0;
      return { ...item, unread };
    });
    
    console.log(merged);

    【讨论】:

    • 为什么这有效new Map?不应该是new Map()吗?
    • 非常感谢 Majed,这就像魔术师一样工作
    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多