我正在尝试使用lodash的isMatch函数来匹配以下两个对象,但是它始终使我为真,因为我看到烫发对象的长度不同并且不匹配,或者下面的参数数组缺少day2是我的方式尝试过的。
var object = {
param: ['day1', 'day2', 'day3'],
param2: ['day2', 'day3', 'day1', 'day0'],
param3: ['day1']
};
var object2 = {
param: ['day3', 'day1'],
param3: ['day1'],
param2: ['day3', 'day2', 'day0', 'day1']
};
var matched = _.isMatch(object, object2);
console.log(matched)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
如果数组包含所有值并且与所有键匹配,则它将以有序方式排列,则所有数组应返回true,否则返回false。
答案 0 :(得分:1)
您可以使用此简单的JavaScript函数:
function match(a, b) {
return Object.keys(a).every(key => {
const set = new Set(a[key]);
return key in b && b[key].length === a[key].length
&& b[key].every(val => set.has(val));
});
}
var object = { param: ['day1', 'day2', 'day3'], param2: ['day2', 'day3', 'day1', 'day0'], param3: ['day1'] };
var object2 = { param: ['day3', 'day1'], param3: ['day1'], param2: ['day3', 'day2', 'day0', 'day1'] };
console.log(match(object, object2));
使用lodash,您可以在每个键/值对上使用difference
:
function match(a, b) {
return _.every(a, (value, key) => !_.difference(value, b[key]).length);
}
var object = { param: ['day1', 'day2', 'day3'], param2: ['day2', 'day3', 'day1', 'day0'], param3: ['day1'] };
var object2 = { param: ['day3', 'day1'], param3: ['day1'], param2: ['day3', 'day2', 'day0', 'day1'] };
console.log(match(object, object2));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"></script>
答案 1 :(得分:0)
_。isMatch 基本上会告诉您第二个对象是否在第一个中“包含”。
var object = { 'a': 1, 'b': 2 };
_.isMatch(object, { 'b': 2 });
// => true
_.isMatch(object, { 'b': 1 });
// => false
(https://lodash.com/docs#isMatch)
似乎您需要 _。isEqual
答案 2 :(得分:-1)
_。isEqual(值,其他)
它在两个值之间进行深度比较以确定它们是否等效。 它支持比较数组,数组缓冲区,布尔值,日期对象,错误对象,映射,数字,对象对象,正则表达式,集,字符串,符号和类型化数组。对象对象通过它们自己的(而不是继承的)可枚举属性进行比较。函数和DOM节点通过严格相等进行比较,即===
var object = {
param: ['day1', 'day2', 'day3'],
param2: ['day2', 'day3', 'day1', 'day0'],
param3: ['day1']
};
var other = {
param: ['day1', 'day2', 'day3'],
param2: ['day2', 'day3', 'day1', 'day0'],
param3: ['day1']
};
_.isEqual(object, other);
// returns true
它将返回true。
var object = {
param: ['day1', 'day2', 'day3'],
param2: ['day2', 'day3', 'day1', 'day0'],
param3: ['day1']
};
var other = {
param: ['day3', 'day1'],
param3: ['day1'],
param2: ['day3', 'day2', 'day0', 'day1']
};
_.isEqual(object, other);
// returns false
它将返回false