我想比较两个数组 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)));
这不会做深入的比较。仅当对象的值是基元(而不是数组、函数或其他对象)时,它才有效。但在你的情况下它也可以工作。
关于javascript - 如何比较过滤器的两个对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61033845/