求问数组内容合并问题

发布于 2022-09-12 02:19:43 字数 857 浏览 12 评论 0

题目描述

有类似如下数组(不止这几条) 数组中id相同的对象合并,有什么更好的方法。

let arr = [
  {
    id: 1,
    title: "768768",
    url: "dasdsadsad",
  },
  {
    id: 2,
    title: "5464",
    url: "dasdsadsad",
  },
  {
    id: 3,
    title: "aaaaa",
    url: "ertert",
  },
  {
    id: 2,
    src: "adsdsds",
    info: "ssssdffdfdf",
    summary: "a345435345",
  },
  {
    id: 3,
    src: "adsdsds",
    info: "ssssdffdfdf",
    summary: "a345435345",
  },
];

希望合并成这种形式,

let arr2 = [
  {
    id: 1,
    title: "768768",
    url: "dasdsadsad",
  },
  {
    id: 2,
    title: "5464",
    url: "dasdsadsad",
    src: "adsdsds",
    info: "ssssdffdfdf",
    summary: "a345435345",
  },
  {
    id: 3,
    title: "aaaaa",
    url: "ertert",
    src: "adsdsds",
    info: "ssssdffdfdf",
    summary: "a345435345",
  },
];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

云淡月浅 2022-09-19 02:19:43

用映射表m保存id=>data的映射,一次遍历完事。

function mergeById (list) {
    const m = {}
    return list.filter(i => m[i.id] ? (Object.assign(m[i.id], i), 0) : (m[i.id] = i, 1))
}
一念一轮回 2022-09-19 02:19:43

终于可以在PC端回复了,首先感谢木马啊的指教。
下面贴一下我的思路

var arr2 = [],obj = {}; 
// 方法一 
arr1.forEach(function(item) {
    if (obj[item.id]) {
        Object.assign(obj[item.id], item)
    } else {
        obj[item.id] = item
    }
})
arr2 = Object.values(obj)

// 方法二 也就是木马哥的思路,他的更简洁
arr2 = arr1.filter(function(item) {
    if (obj[item.id]) {
         Object.assign(obj[item.id], item)
        return false
    } else {
         obj[item.id] = item
        return true
    } 
})
再见回来 2022-09-19 02:19:43
const arr = [
  {
    id: 1,
    title: "768768",
    url: "dasdsadsad",
  },
  {
    id: 2,
    title: "5464",
    url: "dasdsadsad",
  },
  {
    id: 3,
    title: "aaaaa",
    url: "ertert",
  },
  {
    id: 2,
    src: "adsdsds",
    info: "ssssdffdfdf",
    summary: "a345435345",
  },
  {
    id: 3,
    src: "adsdsds",
    info: "ssssdffdfdf",
    summary: "a345435345",
  },
];

const temp = {};
arr.map(item => {
    if (temp[item.id]) {
        temp[item.id] = {...item, ...temp[item.id]}
    } else {
        temp[item.id] = item;
    }
})
const arr2 = Object.values(temp);

image.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文