完全相等的 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) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
浙公网安备 33010602011771号