我写了这个函数来深入比较JavaScript中的两个对象
Equal: function(obj1, obj2) {
var keys1 = Object.keys(obj1).sort();
var keys2 = Object.keys(obj2).sort();
if (keys1.length !== keys2.length) {
return false;
}
// first make sure have same keys.
if (!keys1.every(function(k, i) {
return (k === keys2[i]);
})) {
return false;
}
return keys1.every(function(kk) {
var v1 = obj1[kk];
var v2 = obj2[kk];
if (Array.isArray(v1)) {
return this.EqualArr(v1, v2);
} else if (typeof v1 === "object" && v1 !== null) {
return this.Equal(v1, v2);
} else {
return v1 === v2;
}
});
},
但我收到了这个错误:
无法将undefined或null转换为对象
问题出现在这一行:
var keys2 = Object.keys(obj2).sort();
任何人都可以帮助我吗?
答案 0 :(得分:2)
这里的问题是对Object.keys
此方法不接受null
或undefined
作为参数。为了避免这种情况,你可以检查传递的对象是不是假的。
if (!obj1 && !obj2) {
return false
}
答案 1 :(得分:2)
由于您已经在使用UI5框架,因此可以使用built-in comparator jQuery.sap.equal
。
jQuery.sap.equal(a,b,maxDepth?,包含?)
比较两个给定的值是否相等,特别注意不要通过引用比较数组和对象,而是比较它们的内容。
以下是一个例子:
sap.ui.require([
"jquery.sap.global"
], jQuery => console.log(jQuery.sap.equal({
a: "I'm A",
b: {
property: "I'm B",
c: {
property: "I'm C",
array: [1, 2, 3],
date: new Date("2018-02-28"),
},
},
}, {
a: "I'm A",
b: {
property: "I'm B",
c: {
property: "I'm C",
array: [1, 2, 3],
date: new Date("2018-02-28"),
},
},
})));
console.clear();
<script id="sap-ui-bootstrap" src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"></script>