javascript - 比较两个数组并通过对象 id javascript 删除对象
问题描述
我尝试过的代码是:
const data1 = [{ id: 1, name: 'dd' }, { id: 2, name: 'dd' }, { id: 3, name: 'dd' }, { id: 4, name: 'dd' }, { id: 5, name: 'dd' }];
const sasas = [];
const data2 = [{ id: 2, name: 'dd' },{ id: 4, name: 'dd' }, { id: 5, name: 'dd' }];
data2.map((io) => {
sasas.push(io.id);
});
sasas.forEach((ik) => {
for (let i = 0; i < data1.length - 1; i++) {
if (data1[i].id === ik) {
data1.splice(i, 1);
}
}
});
console.log(data1);
我有两个数组,我将data2数据映射并获取 id 值到sasas中。
然后对于每个 sasas数据,
并使用 forloop拼接data1的索引数据。
然后得到的答案是 id :1 , id:3, id:5 中的对象data1。
但我的预期输出是:
const data1 = [{ id: 1, name: 'dd' },{ id: 3, name: 'dd' }];
请帮我 !
解决方案
尝试这个
data1.filter(x=> !data2.some(y=> y.id==x.id ))
const data1 = [{ id: 1, name: 'dd' }, { id: 2, name: 'dd' }, { id: 3, name: 'dd' }, { id: 4, name: 'dd' }, { id: 5, name: 'dd' }];
const data2 = [{ id: 2, name: 'dd' },{ id: 4, name: 'dd' }, { id: 5, name: 'dd' }];
let result = data1.filter(x=>!data2.some(y=>y.id==x.id))
console.log(result);
上述短解的时间复杂度为O(n*m),低于 O(n+m)版本(n,m 是数组长度):
let h = {}; data2.map(x=>h[x.id]=1);
let result = data1.filter(x=>!h[x.id]);
const data1 = [{ id: 1, name: 'dd' }, { id: 2, name: 'dd' }, { id: 3, name: 'dd' }, { id: 4, name: 'dd' }, { id: 5, name: 'dd' }];
const data2 = [{ id: 2, name: 'dd' },{ id: 4, name: 'dd' }, { id: 5, name: 'dd' }];
let h = {}; data2.map(x=>h[x.id]=1); // we use hash map with data2 ids
let result = data1.filter(x=>!h[x.id]);
console.log(result);
推荐阅读
- c++ - 在自己的初始化程序中使用变量
- java - 如何使用 Spring Data Cassandra 从 cassandra 数据库中读取超过百万条记录并使用 Spring Batch 将其写入文件?
- sql - 从两个不同的表中添加总和值
- html - 我不明白为什么边框属性不起作用
- json - 如何在对象内显示数组元素
- python - Somers'D 是否有针对未分组变量的有效 Python 实现?
- dependencies - 从 elm.json 安装软件包
- flutter - Gradle 构建无法生成 .apk 文件
- php - 我正在我的本地主机中使用 Mailgun 编写教程。发送给我一个错误
- android - 我试图在颤动的小部件中调用一个函数,但没有任何反应