有两个含有数组的复杂对象,怎么递归判断A对象中的某个属性值和B对象值是否相等和两个对象包含的数组中的属性是否相等,不相等返回true,用js实现
时间: 2024-02-09 21:07:53 浏览: 75
好的,请稍等,我给您找一下答案。
对于判断两个对象的属性和数组是否相等,可以使用递归进行比较。具体实现代码如下:
```
function isEqual(a, b) {
// 如果 a 和 b 直接相等,返回 true
if (a === b) {
return true
}
// 如果 a 和 b 都是数组类型
if (Array.isArray(a) && Array.isArray(b)) {
// 如果数组长度不一样,返回 false
if (a.length !== b.length) {
return false
}
// 递归比较数组中每一项
for (var i = 0; i < a.length; i++) {
if (!isEqual(a[i], b[i])) {
return false
}
}
// 如果所有项都相等,返回 true
return true
}
// 如果 a 和 b 都是对象类型
if (typeof a === 'object' && typeof b === 'object') {
// 获取 a 和 b 所有属性名
var aKeys = Object.keys(a)
var bKeys = Object.keys(b)
// 如果属性名个数不一样,返回 false
if (aKeys.length !== bKeys.length) {
return false
}
// 递归比较每一项属性值
for (var i = 0; i < aKeys.length; i++) {
var key = aKeys[i]
if (!isEqual(a[key], b[key])) {
return false
}
}
// 如果所有属性都相等,返回 true
return true
}
// 如果类型不同或者值不同,返回 false
return false
}
```
示例使用方法:
```
var a = {foo: [1, 2, {bar: 'baz'}]}
var b = {foo: [1, 2, {bar: 'baz'}]}
console.log(isEqual(a, b)) // true
```
希望能够帮到您,如果还有其他问题,请继续询问。
阅读全文