UNPKG

yuxuannnn_utils

Version:
45 lines (44 loc) 1.47 kB
"use strict"; function deepDiff(obj1, obj2) { if (typeof obj1 !== typeof obj2) { // 两者数据类型都不一致 return false; } else if (typeof obj1 === 'function') { // 两者都是函数直接比较引用 return obj1 === obj2; } else if (typeof obj1 !== 'object') { // 基本数据类型 return obj1 === obj2; } else if (Array.isArray(obj1) && Array.isArray(obj2)) { // 两者都是数组 if (obj1.length !== obj2.length) { return false; } return obj1.every((it, i) => deepDiff(it, obj2[i])); // 每一项对比都一样返回true } else if (Array.isArray(obj1) !== Array.isArray(obj1)) { // 一个数组 一个对象 return false; } else { // 两个都是对象 if (obj1 === obj2) { // 引用一致 return true; } else { // 对每个属性进行比对 // 这里其实还要考虑符号属性和不可枚举属性 简化一下 const props1 = Object.keys(obj1); const props2 = Object.keys(obj2); if (props1.length !== props2.length) { // 可枚举属性长度不一致 return false; } return props1.every((prop) => deepDiff(obj1[prop], obj2[prop])); // 逐一比较各个属性 } } }