我正在尝试使用lodash忽略未定义的值进行相等比较。
我希望以下内容能起作用:
console.log(
isEqualWith(request.body, actualRequest.body.json, (a, b) => {
console.log(a, b, a === undefined && b === undefined ? true : undefined
);
return a === undefined && b === undefined ? true : undefined;
})
);
但是,即使自定义程序返回未定义,控制台输出在“第一次”比较(整个对象)时也会失败。输出如下:
{ item1: undefined, item2: 'test'} { item2: 'test' } undefined
false
除了第一个对象外,从不比较任何东西。我希望输出如下:
{ item1: undefined, item2: 'test'} { item2: 'test' } undefined
undefined undefined true
'test' 'test' undefined
true
因此,假设定制程序在第一次检查时返回未定义,那么它将遍历对象的字段并对这些字段执行定制程序检查。
答案 0 :(得分:1)
对于对象,当您返回undefined
时,方法_.isEqualWith()
将进行许多比较以确定对象是否相等。实际上,它检查两个对象中的number of keys是否相同,在您的情况下会失败。如果它具有相同数量的键,则在进行hasOwnProperty
检查时将失败。
要进行忽略undefined
值的部分比较,请使用_.isMatch()
,它实际上使用相同的逻辑,但是通过设置{{1}忽略length
(和其他检查) } bitmask
。
COMPARE_PARTIAL_FLAG
const o1 = { item1: undefined, item2: 'test' }
const o2 = { item2: 'test' }
const result = _.isMatch(o1, o2)
console.log(result)