Using underscore.js to compare two Objects

会有一股神秘感。 提交于 2019-12-18 14:12:23

问题


I'm trying to compare two objects with underscore.

Object 1 (Filter)

{
  "tuxedoorsuit":"tuxedoorsuit-tuxedo",
  "occasions":"occasions-wedding"
}

Object 2 (Properties)

{
  "tuxedoorsuit":"tuxedoorsuit-tuxedo",
  "occasions":"occasions-wedding",
  "occasions":"occasions-prom",
  "product_fit":"product_fit-slim",
  "colorfamily":"colorfamily-black"
}

I want to return true when all items of Object 1 are found within Object 2. What would be the best underscore method to use for this?


回答1:


Edit: As per Arnaldo's comment, you can use isMatch function, like this

console.log(_.isMatch(object2, object1));

The description says,

_.isMatch(object, properties)

Tells you if the keys and values in properties are contained in object.

If you want to iterate yourself, just use _.keys and _.every, like this

_.every(_.keys(object1), function(currentKey) {
    return _.has(object2, currentKey) &&
                    _.isEqual(object1[currentKey], object2[currentKey]);
});

Or the chained version,

var result = _.chain(object1)
    .keys()
    .every(function(currentKey) {
        return _.has(object2, currentKey) &&
            _.isEqual(object1[currentKey], object2[currentKey]);
    })
    .value();

If the result is true, it means that all the keys in object1 are in object2 and their values are also equal.

This basically iterates through all the keys of object1 and checks if the value corresponding to the key in object1 is equal to the value in object2.




回答2:


To Compare two objects using underscore.js

 **isEqual :** _.isEqual(object, other) 

Performs an optimized deep comparison between the two objects, to determine if they should be considered equal.

Ex :

var stooge = {name: 'moe', luckyNumbers: [13, 27, 34]};
    var clone  = {name: 'moe', luckyNumbers: [13, 27, 34]};
     _.isEqual(stooge, clone)  
      Returns True



回答3:


Based on previous function created simple consoling out function:

var compareMe = function (obj1, obj2, parentKey) {
  parentKey = parentKey || '';
  _.each(_.keys(obj1), function (key) {
    if(_.isObject(obj1[key]) ) {
        compareMe(obj1[key], obj2[key], parentKey + key + '.')
    } else {
        if (!_.has(obj2, key) || !_.isEqual(obj1[key], obj2[key])) {
            console.log(parentKey + key, obj1[key], obj2[key]);
        }
    }
  })
};

And call like: compareMe(obj1, obj1)



来源:https://stackoverflow.com/questions/28632281/using-underscore-js-to-compare-two-objects

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!