Использование 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)