Lodash isEqualWith和定制工具不会检查字段

时间:2019-05-12 11:09:12

标签: javascript lodash

我正在尝试使用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

因此,假设定制程序在第一次检查时返回未定义,那么它将遍历对象的字段并对这些字段执行定制程序检查。

1 个答案:

答案 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)