数据深比较

111 阅读1分钟

思路其实是很清晰的, 比较对象类型, 不一致,直接返回false,一致,如果是数组或者对象类型,比较长度,长度不一样肯定也是返回false,长度一样,递归比较,其他基础类型理应返回true

const deepCompare = (obj1, obj2) => {
    const type1 = Object.prototype.toString.call(obj1)
    const type2 = Object.prototype.toString.call(obj2)

    if (type1 !== type2)  return false

    if (type1 === '[object Object]') {
            const len1 = Object.keys(obj1).length
            const len2 = Object.keys(obj2).length

            if (len1 !== len2) return false

            for (const key in obj1) {
                  if (!deepCompare(obj1[key], obj2[key])) return false
            }
    } else if (type1 === '[object Array]') {
            const len1 = obj1.length
            const len2 = obj2.length
            if (len1 !== len2) return false

            for (const key in obj1) {
                    if (!deepCompare(obj1[key], obj2[key])) return false
            }

    } else if (type1 === '[object Function]') {
            return true
    } else {
            return obj1 === obj2
    }

    return true
}