🌺
摘要
js如何比较两个对象的值
js如何比较两个对象的值
1.手动递归比较
function deepEqual(obj1, obj2) {
// 1. 处理基本类型或 null/undefined
if (obj1 === obj2) return true;
// 2. 检查类型是否一致
if (
typeof obj1 !== "object" ||
obj1 === null ||
typeof obj2 !== "object" ||
obj2 === null
) {
return false;
}
// 3. 比较对象的键数量
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) return false;
// 4. 递归比较每个属性
for (const key of keys1) {
if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {
return false;
}
}
return true;
}
// 示例
const objA = { a: 1, b: { c: 2 } };
const objB = { a: 1, b: { c: 2 } };
console.log(deepEqual(objA, objB)); // true
2.JSON.stringify
function shallowCompare(obj1, obj2) {
return JSON.stringify(obj1) === JSON.stringify(obj2);
}
// 示例
console.log(shallowCompare({ a: 1 }, { a: 1 })); // true
局限性
- 无法处理函数、undefined、Symbol 等特殊属性
- 属性顺序不同会导致误判(如
{a:1, b:2} 和 {b:2, a:1})
- 循环引用会报错(如 obj.self = obj)。
3.用插件
const _ = require("lodash");
console.log(_.isEqual(objA, objB)); // true 文章发表于 2025-04-15 16:00:00
作者:徐徐转载请注明出处