如何高效对比两个数组对象找出差异项?
我在做数据同步功能时,需要对比新旧两组用户数据,找出新增、删除和修改的项。但用双重循环性能太差,而且判断对象是否相等也不准确,试过 JSON.stringify 但顺序不同就失效了。
有没有更靠谱的方法?比如用 Map 或者第三方库?现在数据量一多页面就卡住,头疼。
const oldData = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }];
const newData = [{ id: 1, name: 'Alice Updated' }, { id: 3, name: 'Charlie' }];
// 想得到:updated: [id=1], added: [id=3], removed: [id=2]
思路很简单,用唯一标识(比如 id)建立 Map 索引,然后分别遍历对比就行。
直接上代码:
使用方式:
关于对象对比,JSON.stringify 的问题你说得对,属性顺序不同就挂了。如果项目里已经用了 lodash,直接用
_.isEqual做深度对比,比自己写的靠谱。或者干脆只对比业务关键字段,别全量对比。如果数据量特别大(上万条),还可以考虑用 Web Worker 放到后台线程跑,避免阻塞主线程。不过大多数场景下 Map 方案够用了。