比较对象或者json是否相等

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 用于函数体以内,

 

你可能感兴趣的:(javascript)