完全相等的 JSON 字符串

问题:

给定两个对象 o1 和 o2 ,请你检查它们是否 完全相等 。

对于两个 完全相等 的对象,它们必须包含相同的键,并且相关的值也必须 完全相等 。如果两个对象通过了 === 相等性检查,它们也被认为是 完全相等 的。

你可以假设这两个对象都是 JSON.parse 的输出。换句话说,它们是有效的 JSON 。

请你在不使用 lodash 的 _.isEqual() 函数的前提下解决这个问题。

答案:/** * @param {any} o1

 * @param {any} o2
 * @return {boolean}
 */
var areDeeplyEqual = function(o1, o2) {
// 是对象且非空返回true
function isObject(obj){ return typeof obj === 'object' && obj !== null }
// 不是对象非空,直接比较是否相等
if(!isObject(o1) || !isObject(o2)) return o1 === o2
// 均为null
if(o1 === o2) return true //此时 o1与o2 都是对象或者数组,而且不相等
// o1,o2类型不同必一个是数组对象一个是类对象,故不相等 if(o1 instanceof Array !== o2 instanceof Array) return false // 先取出 o1 和 o2 的key,比较个数
// o1和o2要么都是数组要么都是对象(类型相同了) if(o1 instanceof Array){
// 两个数组
if(o1.length !== o2.length) return false }else{
// 两个对象 const keys1
= Object.keys(o1) // 得到类的所有属性名,组成数组 const keys2 = Object.keys(o2)
// 拥有的属性数量不同
if(keys1.length !== keys2.length) return false } // 递归比较
//
依次比较两个对象的键值
    for(let key in o1){
        const res = areDeeplyEqual(o1[key], o2[key])
        if(!res) return false
    }
    // 全相等
    return true
};

作者:wmorning
链接:https://leetcode.cn/problems/json-deep-equal/solution/shou-xie-shen-du-bi-jiao-by-wmorning-oa4m/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2023-05-23 16:53  下雨天的伞  阅读(80)  评论(0)    收藏  举报