如何比较下面两个 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)
您可以使用_.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)
从理论上讲,他们并不平等。'' !== 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)