列表

详情


2628. 完全相等的 JSON 字符串

给定两个对象 o1o2 ,请你检查它们是否 完全相等

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

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

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

 

示例 1:

输入:o1 = {"x":1,"y":2}, o2 = {"x":1,"y":2}
输出:true
输入:键和值完全匹配。

示例 2:

输入:o1 = {"y":2,"x":1}, o2 = {"x":1,"y":2}
输出:true
解释:尽管键的顺序不同,但它们仍然完全匹配。

示例 3:

输入:o1 = {"x":null,"L":[1,2,3]}, o2 = {"x":null,"L":["1","2","3"]}
输出:false
解释:数字数组不同于字符串数组。

示例 4:

输入:o1 = true, o2 = false
输出:false
解释:true !== false

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板

javascript 解法, 执行用时: 76 ms, 内存消耗: 46.2 MB, 提交时间: 2023-04-17 17:07:24

/**
 * @param {any} o1
 * @param {any} o2
 * @return {boolean}
 */
var areDeeplyEqual = function(o1, o2) {
    if (Array.isArray(o1) !== Array.isArray(o2)) {
        return false;
    }

    if (typeof o1 !== "object" || typeof o2 !== "object" || o1 === null || o2 === null) {
        return o1 === o2;
    }
  
    const o1Keys = Object.keys(o1);
    const o2Keys = Object.keys(o2);
    if (o1Keys.length !== o2Keys.length || !o1Keys.every(key => o2.hasOwnProperty(key))) {
        return false;
    }
    
    return o1Keys.every(key => areDeeplyEqual(o1[key], o2[key]));
};

上一题