假设我有两个对象数组:
const array1 = [
{ name: 'detail1', title: 'detail1' },
{ name: 'detail2 ', title: 'detail2 ' },
{ name: 'detail3', title: 'detail3' },
{ name: 'detail4', title: 'detail4' },
{ name: 'detail5', title: 'detail5' },
{ name: 'detail6', title: 'detail6' },
{ name: 'detail7', title: 'detail7' }
]
const array2 = [
{ name: 'detail1', title: 'detail1' },
{ name: 'detail2 ', title: 'detail2 ' },
{ name: 'detail3', title: 'detail3' },
{ name: 'detail4', title: 'detail4' },
]
我想比较两个数组,即array 1和array 2,得到array 2中缺少的元素。
为此,我尝试了:
var absent = array2.filter(e=>!array1.includes(e));
但是我无法得到array 2的缺失元素。
我期待的O/P:
[ { name: 'detail5', title: 'detail5' },
{ name: 'detail6', title: 'detail6' },
{ name: 'detail7', title: 'detail7' }]
这些是所有不在array 2中的元素。
我到底做错了什么?
如果有人需要进一步的信息,请告诉我。
4条答案
按热度按时间cetgtptt1#
你可以用键和值构建一个标准化的对象,然后过滤对象。
nfzehxib2#
编辑:你想要的对象在A而不是在B。理想的做法是遍历A,找出元素是否存在于B中。如果是,则不包括它。
在javacript中,当你使用“==”或“===”或其他数组搜索方法时,对象引用会被比较。
{} == {}
将返回false。您可以在您的开发控制台中进行检查。在这种情况下,您必须检查特定的属性。
在内部的findIndex中,我根据一个条件查找索引。在filter方法中,只有当索引为-1(未找到)时才返回true。
exdqitrt3#
这对我很有效:
mspsb9vt4#