You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Lodash深度比较两个结构相同的对象是否相等

深度对比结构相同对象的正确实现

你现在用的isArrayEqual函数是专门用来对比数组的,直接拿来对比对象肯定不行——因为Lodash把对象传入_()后,会转换成键值对数组(比如[{key: 'list', value: {...}}, ...]),这时候xorWith的对比逻辑完全偏离了你要的对象属性深度对比。

其实要深度对比两个结构相同的对象,Lodash的_.isEqual本身就支持全属性的深度校验,包括嵌套对象、数组、空对象这些场景都能处理。

正确的对象深度对比函数

如果要封装成函数,直接基于_.isEqual就行:

export const isObjectDeepEqual = (x, y) => {
  return _.isEqual(x, y);
};

验证你的示例对象

拿你给出的obj1和obj2来说,_.isEqual会检测出两处差异:

  • list.text_list:obj1是"RESPUESTA CON LSITA 2",obj2是"RESPUESTA Editada"
  • list.items_list[1].title_item:obj1是"Respuesta 3",obj2是"Respuesta 5"

调用isObjectDeepEqual(obj1, obj2)会返回false,完全符合预期。

如果你确实要对比数组(比如对象数组)

要是你的场景是对比两个包含对象的数组,那你原来的isArrayEqual其实是有效的——因为_.xorWith结合_.isEqual会深度对比数组中的每个对象元素,返回空数组就说明两个数组的元素(包括嵌套属性)完全一致。比如对比两个结构相同的对象数组:

const arr1 = [obj1, {a: 1}];
const arr2 = [obj1, {a: 1}];
isArrayEqual(arr1, arr2); // 返回true

内容的提问来源于stack exchange,提问作者ddaudiosolutions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:05:19