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

5
如何比较以下两个JavaScript对象以使它们相等且为真。

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

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

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


2个回答

9
您可以使用_.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);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>


完美的答案,谢谢。 - chichilatte

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;
}
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接