【问题标题】:compare JS objects with values null and empty string比较具有 null 值和空字符串的 JS 对象
【发布时间】:2019-11-05 19:38:45
【问题描述】:

如何比较下面两个 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>

【问题讨论】:

标签: javascript lodash


【解决方案1】:

您可以使用_.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>

【讨论】:

  • 完美答案,谢谢。
【解决方案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>

【讨论】:

    猜你喜欢
    • 2014-11-30
    • 2021-03-20
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2016-07-19
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多