Try   HackMD

2628. JSON Deep Equal

tags: leetcode 30 days js challenge Medium

2628. JSON Deep Equal

題目描述

Given two objects o1 and o2, check if they are deeply equal.

For two objects to be deeply equal, they must contain the same keys, and the associated values must also be deeply equal. Two objects are also considered deeply equal if they pass the === equality check.

You may assume both objects are the output of JSON.parse. In other words, they are valid JSON.

Please solve it without using lodash's _.isEqual() function.

範例

Example 1:

Input: o1 = {"x":1,"y":2}, o2 = {"x":1,"y":2}
Output: true
Explanation: The keys and values match exactly.

Example 2:

Input: o1 = {"y":2,"x":1}, o2 = {"x":1,"y":2}
Output: true
Explanation: Although the keys are in a different order, they still match exactly.

Example 3:

Input: o1 = {"x":null,"L":[1,2,3]}, o2 = {"x":null,"L":["1","2","3"]}
Output: false
Explanation: The array of numbers is different from the array of strings.

Example 4:

Input: o1 = true, o2 = false
Output: false
Explanation: true !== false

Constraints:

  • 1 <= JSON.stringify(o1).length <= 105
  • 1 <= JSON.stringify(o2).length <= 105
  • maxNestingDepth <= 1000

解答

TypeScript

function areDeeplyEqual(o1: any, o2: any): boolean { if (o1 === o2) return true; if (o1 === null || o2 === null) return false; if (typeof o1 !== typeof o2) return false; if (Array.isArray(o1) !== Array.isArray(o2)) return false; if (typeof o1 === 'object') { const o1Keys = Object.keys(o1); const o2Keys = new Set(Object.keys(o2)); if (o1Keys.length !== o2Keys.size) return false; for (const key of o1Keys) { if (!o2Keys.has(key)) return false; if (!areDeeplyEqual(o1[key], o2[key])) return false; } return true; } return false; }

SheepSun, May 21, 2023

Reference

回到題目列表