Использование underscore.js для сравнения двух объектов

Я пытаюсь сравнить два объекта с подчеркиванием.

Объект 1 (Фильтр)

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

Объект 2 (Свойства)

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

Я хочу вернуть true, когда все объекты Object 1 найдены в Object Object 2. Каким будет лучший метод подчеркивания для этого?

Ответы

Ответ 1

Изменить: согласно комментарию Арнальдо, вы можете использовать функцию isMatch, например

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

В описании говорится:

_.isMatch(object, properties)

Сообщает вам, содержатся ли ключи и значения в свойствах в объекте.

Если вы хотите итерации, просто используйте _.keys и _.every, как это

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

Или прикованный вариант,

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

Если результат true, это означает, что все ключи в object1 находятся в object2 и их значения также равны.

Это в основном выполняется через все ключи object1 и проверяет, соответствует ли значение, соответствующее ключу в object1 значению в object2.

Ответ 2

Чтобы сравнить два объекта, используя underscore.js

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

Выполняет оптимизированное глубокое сравнение между двумя объектами, чтобы определить, следует ли считать их равными.

Пример:

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

Ответ 3

На основе предыдущей функции создана простая функция консолидации:

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]);
        }
    }
  })
};

И назовите: compareMe (obj1, obj1)