我写了此功能以深入比较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;
}
});
},
但是我有一个错误:
无法将未定义或无效转换为对象
问题发生在此行:
var keys2 = Object.keys(obj2).sort();
任何人可以帮我吗?
由于您已经在使用UI5框架,因此可以使用内置比较器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>
- UI5实际比较两个给定对象
- 其他测试用例
这里的问题是调用Object.keys
此方法不接受null
或undefined
作为参数。为了避免您可以检查传递的对象不是虚假的。
if (!obj1 && !obj2) {
return false
}