数组对像合并,用新的内容覆盖老的怎么解决

发布于 2022-09-12 13:45:11 字数 379 浏览 16 评论 0

数组对像合并

//默认数组队象

list:[
    {a:'标题',b:'5',c:'text'},
    {a:'简介',b:'50',c:'text'},
]

新设置的数组队象 覆盖合并到上面的数组队象中,用新的数据覆盖默认数据,

list:[
    {a:'标题',b:'10',d:'time'},
    {a:'简介',b:'150'},
]

最终合并后得到

list:[
    {a:'标题',b:'10',c:'text',d:'time'},
    {a:'简介',b:'150',c:'text'},
]

求问有什么好方法!

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

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

发布评论

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

评论(4

め可乐爱微笑 2022-09-19 13:45:11

如果a是唯一值

let list1 = [
    {a:'标题',b:'5',c:'text'},
    {a:'简介',b:'50',c:'text'},
]
const list2 = [
    {a:'标题',b:'10',d:'time'},
    {a:'简介',b:'150'},
]

list1 = list1.map(item => {const temp = list2.find(r => r.a===item.a)||{};return {...item,...temp} })
你的背包 2022-09-19 13:45:11

函数:

function merge(dest, source, identity) {
    dest.forEach(d => {
        const sObj = source.find(s => identity(d, s));
        if (sObj) {
            Object.assign(d, sObj);
        }
    });
    return dest;
}

使用:

const list1 = [
    { a: "标题", b: "5", c: "text" },
    { a: "简介", b: "50", c: "text" },
];

const list2 = [
    { a: "标题", b: "10", d: "time" },
    { a: "简介", b: "150" },
];

console.log(merge(list1, list2, (d, s) => d.a === s.a));

输出结果:

[
  { a: '标题', b: '10', c: 'text', d: 'time' },
  { a: '简介', b: '150', c: 'text' }
]
话少心凉 2022-09-19 13:45:11

这个问题的关键在于合并的依据是什么。一般最常见的情况是每项数据都有一个唯一的 id,合并时相同 id 的数据进行 Object.assign。

若是根据数组顺序进行合并的话,那就更简单了,取两个数组中最长的一个 length 值,用 for 遍历直接合并即可。但这种方式不严谨,一般不推荐这样做。

垂暮老矣 2022-09-19 13:45:11

用于合并配置,所以新的配置,是要覆盖源有的,键值的!
两个朋友的代码都挺好。 速度不同,
比我自己FOR出来的快多了

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