如果在另一个列表中找到特定属性,则从列表中删除元素

时间:2018-03-13 19:14:34

标签: javascript

我有两个对象列表,主要包含不同的属性。但是,它们之间的一个属性是相似的。我使用它来验证一个列表不包含具有在另一个列表中找到的对象中存在的属性的对象。

假设childrenA是包含属性nameageweight的对象列表,childrenB是包含属性{{1}的对象列表},nameeyeColor

要过滤hairColor,使其不包含与childrenA中名称相同的对象,我会这样做:

childrenB
然而,孩子仍然分享孩子B的名字。在这种情况下使用filter / some是不正确的?

1 个答案:

答案 0 :(得分:2)

是的,因为.some如果任何元素的回调都为真,它将返回true,仅仅childrenB的一个成员没有相同的名称就足够了(这不是不是你想要的。

请考虑使用相关的.every方法:

(简单来说,这会检查 childrenB的每个成员的名称与childA不同):

childrenA = childrenA.filter(function(childA) {
    return childrenB.every(function(childB) {
        return childA.name !== childB.name;
    });
});

或者,您可以否定.some的返回并检查名称相等性:

(同样,在英语中,这会检查不是childrenB的某些成员,其名称与childA相同。您应该能够看到这是怎么回事只是上面相同检查的另一种形式)

childrenA = childrenA.filter(function(childA) {
    return !childrenB.some(function(childB) { // <-- note the negation
        return childA.name === childB.name; // <-- note the ===
    });
});