javascript - Javascript数组的区别
问题描述
我有两个这样的数组
data = [{id: 1, name: apple},
{id: 2, name: mango},
{id: 3, name: grapes},
{id: 4, name: banana}]
data2 =[{id: 1, name: apple},
{id: 3, name grapes}]
我的预期结果是:
[{ id: 2, name: mango},
{id:4, name: banana}]
我的代码是
let finalData =[];
data.forEach(result => {
data2.find(datum => {
if(datum['id'] === result['id]{
finalData.push(result);
}
})
})
我得到错误的结果。我可以使用的最简单的代码或库是什么?
解决方案
您的示例数据没有意义,但假设您的意思是具有匹配 ID 的所有数据项也具有匹配的名称,并且还假设您想要一组 ID 在两组数据中相同的所有项目,您可以使用 aSet
来跟踪一个数组中存在哪些 ID,然后通过在集合中具有其 ID 的那些过滤第二个数组:
const idsInFirst = new Set(data.map(d => d.id));
const intersection = data2.filter(d => idsInFirst.has(d.id));
之所以使用中间Set
结构,是因为它允许O(1)
在一次扫描后进行查找,这比一遍又一遍地重复扫描第一个数组更有效。
如果您的意思是说您想要数据集之间的差异(其中排除的项目data
在 中data2
),那么您可能想要否定/反转一些东西:
const idsToExclude = new Set(data2.map(d => d.id));
const difference = data.filter(d => !idsToExclude.has(d.id));
编辑
在您进行明确的编辑之后,这是您想要的第二个代码块。
推荐阅读
- angular - 两次订阅 Angular 11 http?
- amazon-web-services - 使用 S3 作为原始数据的数据管道将如何工作?
- python - Python:从字符串中提取特定单词
- angularjs - 有条件的 ng 风格
- javascript - 如何比较两个异步 JavaScript 函数的结果?
- python - 使用年份规范将列“日”转换为日期时间
- excel - 在公式中添加 [空格]
- python - 使用 Python 连接一个空数组
- sql-server - 错误“-2147217887(80040e21) odbc 驱动程序不支持请求的属性”
- audio - 如何通过时移合并/混合/叠加多个视频?