1、可以比较obj = { a:1,b:['sd',1],c:{d:3}} 这种格式的对象数据。
function isEqualObj(obj1, obj2) {
let obj1Key = Object.keys(obj1);
let obj2Key = Object.keys(obj2);
if (obj1Key.length !== obj2Key.length) return false;
// 先比较key是否相等
if (new Set(obj1Key.concat(obj2Key)).size !== obj1Key.length) return false;
for (let item of obj1Key) {
if (Array.isArray(obj1[item])) {
if (obj1[item].length !== obj2[item].length) return false;
// 对比一位数组
if (new Set(obj1[item].concat(obj2[item])).size !== obj2[item].length) return false;
} else if (Object.prototype.toString.call(obj1[item]) === '[object Object]') {
// 递归
if (!this.isEqualObj(obj1[item], obj2[item])) return false;
} else if (obj1[item] !== obj2[item]) {
return false;
}
}
return true;
};
//注意:for...of 与break、continue和return使用跳出循环
2、比较JSON数据
function isEqualJson(json1,json2){
let isEqual = true;
let arrIndex = []; //避免重复比较
if(json1.length !== json2.length) return false;
for (let i = 0; i < json1.length; i++){
if(!isEqual) break;
let obj1 = json1[i];
isEqual = false;
for( let j = 0; j < json2.length; j++){
if(isEqual) {
arrIndex.push(j-1);
break;
}
if(!arrIndex.includes(j)){
let obj2 = json2[j];
// 比较obj1、obj2是否相等
isEqual = isEqualObj(obj1,obj2)
}
}
}
return isEqual
}
3、关于跳出循环
(1)、跳出本次循环,不在执行之后的js,继续下一次循环;
a、continue;----只能用在while语句、do/while语句、for语句、或者for/in语句的循环体;
b、 return true;
(2)、 跳出整个循环:
a、 break;
b、 return false;
注意:return 用于函数体以内,