43 lines
1.0 KiB
JavaScript
43 lines
1.0 KiB
JavaScript
// 套餐比较两个对象是否相等
|
|
export function isObjectEqual(obj1, obj2) {
|
|
if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) {
|
|
return obj1 === obj2;
|
|
}
|
|
const keys1 = Object.keys(obj1);
|
|
const keys2 = Object.keys(obj2);
|
|
if (keys1.length !== keys2.length) {
|
|
return false;
|
|
}
|
|
for (const key of keys1) {
|
|
if (Array.isArray(obj1[key]) && Array.isArray(obj2[key])) {
|
|
if (!isArrayEqual(obj1[key], obj2[key])) {
|
|
return false;
|
|
}
|
|
} else if (!isObjectEqual(obj1[key], obj2[key])) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// 比较两个数组是否相等(忽略顺序)
|
|
export function isArrayEqual(arr1, arr2) {
|
|
if (arr1.length !== arr2.length) {
|
|
return false;
|
|
}
|
|
const usedIndices = new Array(arr2.length).fill(false);
|
|
for (const item1 of arr1) {
|
|
let found = false;
|
|
for (let i = 0; i < arr2.length; i++) {
|
|
if (!usedIndices[i] && isObjectEqual(item1, arr2[i])) {
|
|
usedIndices[i] = true;
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!found) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
} |