javascript - 获取两个数组之间的差异
问题描述
我只需要得到两个数组之间的差异
我试过了:
let arr1 = {
"data": [{
"id": "EID_Floss",
"name": "Floss",
"te": "dd"
}]
}
let arr2 = {
"data": [{
"id": "EID_Floss",
"name": "Floss"
}]
}
JSON.stringify(arr2.data.filter((x) => !arr1.data.includes(x)))
结果:
[{
"id": "EID_Floss",
"name": "Floss"
}]
如何只得到这个:
[{
"te": "dd"
}]
解决方案
看这个更简单的例子:
arr1 = ["foo", "bar"];
arr2 = ["foo", "bar", "foobar"];
arr3 = arr2.filter((x) => !arr1.includes(x));
console.log(arr3);
这正是您所期望的,输出是:
[“富吧”]
您的示例的问题在于数组 inarr1.data
并arr2.data
包含objects。您正在比较对象
{
"id": "EID_Floss",
"name": "Floss",
"te": "dd"
}
从arr1
与对象
{
"id": "EID_Floss",
"name": "Floss"
}
从arr2
. 由于这些不相等,因此您的过滤器不会从数组中删除对象。
请注意,这是一个全有或全无的操作,因为您正在过滤对象数组。相反,听起来您想过滤每个对象中的键。所以你需要使用Object.keys()
或Object.values()
迭代对象的内容。
推荐阅读
- javascript - 法线贴图与减少
- java - 展开 Material BottomSheet 时如何调整 RecyclerView 的大小?
- docker - 除非我 ssh 到容器,否则 crond 不会运行
- django-rest-framework - DRF ViewSet - 处理查询参数
- node.js - 如何知道我登录 Admin-Bro 的当前用户
- r - 对多个多项式求和
- jsf - javax.el.PropertyNotWritableException: /kaizenViewMANUF.xhtml @105,193 filterValue="#{kaizenView.currentUserSite()}": 集合操作的非法语法
- java - Java8 Streams:如何保留map之前的值以供collect / groupingBy函数访问
- javascript - JavaScript 中的耳机按钮事件检测
- c# - 如何在c# unity中更改图像组件的图像源?