跳到主要内容

2628.完全相等的JSON字符串

链接:2628.完全相等的JSON字符串
难度:Medium
标签:
简介:给定两个对象 o1 和 o2 ,请你检查它们是否 完全相等 。

题解 1 - typescript

  • 编辑时间:2023-04-23
  • 执行用时:120ms
  • 内存消耗:50.1MB
  • 编程语言:typescript
  • 解法介绍:闭包。
function stringCompare(str1: string, str2: string) {
const [n1, n2] = [str1.length, str2.length];
let i = 0;
while (i < n1 && i < n2)
if (str1[i] == str2[i]) i++;
else return str1.codePointAt(i)! - str2.codePointAt(i)!;
if (i == n1 && i == n2) return 0;
if (i == n1) return -1;
else return 1;
}
const sort = (o: object) => Object.entries(o).sort(([k1], [k2]) => stringCompare(k1, k2));
function areDeeplyEqual(o1: any, o2: any): boolean {
const [t1, t2] = [typeof o1, typeof o2];
// 类型不等就错了
if (t1 !== t2) return false;
// 如果不是对象,直接判断
if (t1 !== 'object') return o1 === o2;
// 如果是null或undefined,直接判断
if (o1 === null || o1 === undefined || o2 === null || o2 === undefined) return o1 === o2;
// 如果是数组,先判断是否都是数组或者都不是数组
const [isArr1, isArr2] = [Array.isArray(o1), Array.isArray(o2)];
if ((!isArr1 && isArr2) || (isArr1 && !isArr2)) return false;
// 键值对排序
const [item1, item2] = [sort(o1), sort(o2)];
// 如果长度不想等,就错了
if (item1.length !== item2.length) return false;
// 如果键不等,或者值不等,就错了
for (let i = 0; i < item1.length; i++)
if (item1[i][0] !== item2[i][0] || !areDeeplyEqual(item1[i][1], item2[i][1])) return false;
return true;
}