比较两数组差异(Diff Two Arrays)(增删改)

发布于 2022-09-12 00:53:04 字数 631 浏览 28 评论 0

也可理解为是将两个数组拆分成三个数组:

已知一个学生列表oldlist,经过增删改后得到newlist.
最终对比得到以下三个数组:

edit:被编辑的学生
dele:被删除的学生
add: 新增的学生

function diff(arr1, arr2) {
    var dd = {};
    // Same, same; but different.
    return dd;
}

例如

const oldData=[{ id: 1, name: '小明'},{ id: 2, name: '小直' },{ id: 3, name: '小信' }]
const newData=[{ id: 1, name: '小明'},{ id: 2, name: '小奈' },{ id: 6, name: '小夜' }]

const dd = diff(oldData, newData)
console.log(dd) // { edit: [{ id: 2, name: '小奈' }], dele: [{ id: 3, name: '小信' }], add: [{ id: 6, name: '小夜' }]}

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

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

发布评论

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

评论(2

随梦而飞# 2022-09-19 00:53:04

前提假设:在同一组数据中,id 唯一
详细解释请看注释

function diff(oldData, newData) {
    // id 只在 newData 中存在且不在 oldData 中存在的即为 add
    const add = newData.filter(e => !oldData.find(c => c.id === e.id));
    // id 只在 oldData 中存在且不在 newData 中存在的即为 dele
    const dele = oldData.filter(e => !newData.find(c => c.id === e.id));
    // id 在 oldData 中和 newData 中都存在且 name 的值不同,即为 edit
    const edit = newData.filter(e => {
        let found = oldData.find(c => c.id === e.id);
        return found && found.name !== e.name
    });

    return { add, dele, edit };
}

运行结果:
image.png

别把无礼当个性 2022-09-19 00:53:04
const diff = (o, n) => { const r = { edit: [], add: n.filter(i => !o.find(q => q.id === i.id)), dele: []}; o.forEach(i => { const m = n.find(q => q.id === i.id); m ? JSON.stringify(i) === JSON.stringify(m) ? null : r.edit.push(m) : r.delete.push(i)}); return r; }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文