2628. 完全相等的 JSON 字符串
给定两个对象 o1
和 o2
,请你检查它们是否 完全相等 。
对于两个 完全相等 的对象,它们必须包含相同的键,并且相关的值也必须 完全相等 。如果两个对象通过了 ===
相等性检查,它们也被认为是 完全相等 的。
你可以假设这两个对象都是 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
提示:
1 <= JSON.stringify(o1).length <= 105
1 <= JSON.stringify(o2).length <= 105
maxNestingDepth <= 1000
原站题解
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])); };