javascript - 如何比较过滤器的两个对象数组
问题描述
我想比较两个数组 obj 的过滤器如何过滤与另一个数组 obj 的对象完全不同的对象的数组?
var y = [
{ nb :'rouge',
xb :'rouge',
x : 12 },
{ nb :'red',
xb :'rouge',
x : 12 }
]
,
var x = [
{ nb :'rouge',
xb : 'rouge',
x : 12,
},
{ nb :'red',
xb : 'rouge',
x : 12,
},
{ nb :'violet',
xb : 'violet',
x : 12,
},
]
const dispo = x.filter( x !== y );
console.log(dispo)
预期结果 :
[ { nb:紫罗兰色,xb:'紫罗兰色',x:12}
]
解决方案
您将需要按值比较对象。您可以使用 lodash 的 _.isEqual 或 _.isEqualDeep 之类的东西。没有 lodash 的简单方法是这样的:
function compare(a, b)
{
if (Object.keys(a).length !== Object.keys(b).length) {
return false;
}
for (let p of Object.keys(a)) {
if (!b.hasOwnProperty(p)) {
return false;
}
if (a[p] !== b[p]) {
return false
}
}
return true;
}
function includesObj(array, obj)
{
for (let el of array) {
if (compare(obj, el)) {
return true;
}
}
return false;
}
console.log(x.filter(el => !includesObj(y, el)));
这不会做深度比较。只有当你的对象的值是基元(不是数组、函数、其他对象)时,它才会起作用。但在你的情况下,它也将起作用。
推荐阅读
- css - `html` 和 `html, body` 选择器在渲染结果方面有什么区别吗
- laravel - 删除功能不适用于控制器
- c# - 将 MagickImage 转换为位图
- flutter - 颤动中浮动操作按钮上的通知徽章
- javascript - 如何使用javascript根据数组项过滤对象?
- google-tag-manager - 谁知道 Facebook 标准转换的 GTM 脚本:预约预约和电话号码点击?
- r - 使用 facet_wrap_paginate 循环无序交替生成的图
- excel - 有谁知道如何在 VBA 中关闭基于 ODATA (xlConnectionTypeModel) 的 PowerQuery 连接的后台刷新?
- java - 使用 JUnit/TestNG 作为列表传递套件中的参数变量
- javascript - 必须有一种方法可以程序化地生成这个数组