比较具有 null 和空字符串值的 JS 对象

imP*_*mPK 4 javascript lodash

如何比较下面两个 JavaScript 对象是否相等且为真

var obj1 = {
  'a': 'something',
  'b': null
};
var obj2 = {
  'a': 'something',
  'b': ''
}

var isTrue = _.isEqual(obj1, obj2);

alert(isTrue);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

Ori*_*ori 6

您可以使用_.isEqualWith()并创建自定义谓词来处理这种情况:

var obj1 = {
  'a': 'something',
  'b': null
};
var obj2 = {
  'a': 'something',
  'b': ''
}

var isTrue = _.isEqualWith(obj1, obj2, (a, b) => {
  // if both are null or equal to an empty string then they are equal
  if((_.isNull(a) || a === '') && (_.isNull(b) || b === '')) return true;
});

console.log(isTrue);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


Nic*_*las 2

从理论上讲,他们并不平等。'' !== null
您可以做的是首先将每个空值更改为 null,然后比较它们。

var obj1 = {
  'a': 'something',
  'b': null
};
var obj2 = {
  'a': 'something',
  'b': ''
}



var isTrue = _.isEqual(mapEmptyValueToNull(obj1), mapEmptyValueToNull(obj2));
console.log(isTrue);

// we change every value of '' to null.
function mapEmptyValueToNull(object) {
  Object.keys(object).forEach((key) => {
    if(object[key] === '') {
      object[key] = null;
    }
  });
  return object;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)