如何检查对象的属性是否代表另一个对象的超集?

时间:2014-09-29 05:01:13

标签: javascript javascript-objects lodash

假设我们有两个对象:

var foo = {
       a: 3,
       b: 'yellow',
       c: {
           d: 5,
           e: 'green'
       }
    },
    bar = {
       b: 'yellow',
       c: {
           d: 5,
           e: 'green'
       }
    };

检查foo包含bar的最佳方式是什么?

我已在我的应用程序中使用Lodash,因此如果它更容易,您可以使用该库中的函数。否则,香草JS很好。

[编辑]

好吧,让我试着解释一下当我使用term' contains'时我的意思。我会用LoDash术语来做。

LoDash有_.extend方法,所以如果有2个对象:

var obj1 = {a:1, b:2}, 
    obj2 = {b:4, c:{d:'green', e:5}}

然后操作_.extend(obj1, obj2)将延伸' obj1 - 它现在具有值

{a:1, b:4, c:{d:'green', e:5}} 

即。 obj1'包含' obj2现在。

3 个答案:

答案 0 :(得分:2)

_.isMatch(foo, bar)完成了工作。

https://lodash.com/docs/4.17.15#isMatch

答案 1 :(得分:1)

@GregL为这个问题提供了一个有效的解决方案。这个对我有用。但我发现了类似的更简洁的解决方案,所以我决定透露它:

_.some([foo], bar)

答案 2 :(得分:0)

function containsObject(parent, child) {
    return !!_.findWhere(_.flatten([parent]), child);
}

alert(containsObject(foo, bar)); // alerts "true"