我想检查一个数组中的对象是否存在于另一个数组中,因此对于以下示例,事件数组返回true,但event1数组返回false。
combination.some(a => event.every((v,i)=> v.code == a [i] .code))
let combination = [
[
{ code: "repeatAdh", value: null },
{ code: "duplicatePartner", value: null }
]
];
let event = [
{ code: "repeatAdh", value: "Répéter adhérent par carte" },
{ code: "duplicatePartner", value: "Répéter conjoint" }
];
let event1 = [
{ code: "duplicatePartner", value: "Répéter conjoint" },
{ code: "repeatAdh", value: "Répéter adhérent par carte" }
];
答案 0 :(得分:0)
JavaScript没有内置的方法可以比较不同对象的值。
当您比较2个对象时,Javascript将检查它们是否是“相同”对象,但不是通过值,而是通过标识。
例如,这两个对象不是同一对象。
const a = { foo: 'bar' };
const b = ( foo: 'bar' };
a === b // false
这两个相同:
const a = { foo: 'bar' };
const b = a;
a === b // true
在第二个示例中,如果您向a
添加属性,则该属性也会显示在b
上。
要按值比较两个对象 ,您需要遍历每个属性,看看它们是否都匹配。
答案 1 :(得分:0)
在JavaScript中检查对象之间的相等性非常棘手。没有内置功能可以给您直接的答案。因此,首先,您必须定义上下文中“等于”或“存在”的含义。
例如,如果您知道要检查的对象始终具有相同的键,则可以说,如果它们的值匹配,它们是相等的。给出你的例子
function isEqual(a, b) {
return (
a.code === b.code && a.value === b.value
)
}
然后,您可以创建一个函数,该函数将检查列表中每个元素的相等性。
function listIsEqual(a, b) {
return a.every(objA =>
b.reduce((acc, objB) =>
acc || isEqual(objA, objB)
, false)
);
}
您可以对照event
来检查event1
,这将返回true
。
listIsEqual(event, event1)
> true
您可以使用该函数检查event
列表中是否存在events
。
function objIsInList(target, list) {
return list.some(object => listIsEqual(target, object));
}
objIsInList(event, combination)
> false
objIsInList(event1, combination)
> false
objIsInList(combination[0], combination)
> true
但是,如果您的相等性检查更加复杂,则最好使用lodash之类的库提供的现有解决方案之一。 Lodash提供了一个名为isEqual
和isEqualDeep
的函数,可以检查任何对象之间的相等性。 Here is its documentation
希望对您有帮助。