js 判断两个非空非数组的json对象键名与值是否相同,用循环嵌套和多次循环两种方式
时间: 2023-06-04 19:05:02 浏览: 128
JS判断两个数组或对象是否相同的方法示例
5星 · 资源好评率100%
可以使用循环嵌套和多次循环两种方式来判断两个非空非数组的json对象键名与值是否相同。
1. 循环嵌套的方式:
代码如下:
function isEqual(obj1, obj2) {
if (obj1 === obj2) {
return true;
}
if (typeof obj1 !== 'object' || obj1 == null || typeof obj2 !== 'object' || obj2 == null) {
return false;
}
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) {
return false;
}
for (let key of keys1) {
if (!keys2.includes(key) || !isEqual(obj1[key], obj2[key])) {
return false;
}
}
return true;
}
使用方式如下:
let obj1 = {a: 1, b: "hello", c:{d: 2}};
let obj2 = {a: 1, b: "hello", c:{d: 2}};
console.log(isEqual(obj1, obj2)); // true
2. 多次循环的方式:
代码如下:
function isEqual(obj1, obj2) {
if (obj1 === obj2) {
return true;
}
if (typeof obj1 !== 'object' || obj1 == null || typeof obj2 !== 'object' || obj2 == null) {
return false;
}
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) {
return false;
}
for (let i = 0; i < keys1.length; i++) {
let key = keys1[i];
if (keys2[i] !== key || !isEqual(obj1[key], obj2[key])) {
return false;
}
}
return true;
}
使用方式与上面相同。
注意事项:
如果两个对象中包含数组,则需要使用递归的方法进行比较,不能简单地使用 == 或 === 进行比较。同时,如果两个对象中包含函数,则函数所在的属性会被忽略。
阅读全文