使用 underscore.js 比较两个对象
Using underscore.js to compare two Objects
我正在尝试用下划线比较两个对象。
对象 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"
}
当在对象 2 中找到对象 1 的所有项目时,我想 return 为真。用于此的最佳下划线方法是什么?
编辑:按照, you can use isMatch
函数,像这样
console.log(_.isMatch(object2, object1));
描述说,
_.isMatch(object, properties)
Tells you if the keys and values in properties are contained in object.
如果你想自己迭代,就用_.keys
and _.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
中的值。
使用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
基于之前的函数创建了简单的consoling out函数:
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)
我正在尝试用下划线比较两个对象。
对象 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"
}
当在对象 2 中找到对象 1 的所有项目时,我想 return 为真。用于此的最佳下划线方法是什么?
编辑:按照isMatch
函数,像这样
console.log(_.isMatch(object2, object1));
描述说,
_.isMatch(object, properties)
Tells you if the keys and values in properties are contained in object.
如果你想自己迭代,就用_.keys
and _.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
中的值。
使用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
基于之前的函数创建了简单的consoling out函数:
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)