在前端开发中,经常需要比较两个对象是否相同,尤其是当两个对象的层级比较深时,逐个比较比较麻烦。此时,可以使用 npm 包 object-deep-differ,实现深度对象的比较。
安装
可以使用 npm 直接安装 object-deep-differ:
npm install object-deep-differ --save
如何使用
object-deep-differ 提供了一个函数 deepDiff,用于比较两个对象。
安全检查
因为在深度对象比较过程中,可能会出现循环引用的问题,因此需要提前确保对象不存在循环引用。可以使用 json-stringify-safe 进行安全检查。
const deepDiff = require('object-deep-differ'); const stringify = require('json-stringify-safe'); const a = { a: { b: 1 } }; const b = { a: { b: 2 } }; console.log('deepDiff:', stringify(deepDiff(a, b))); // deepDiff: {"a":{"b":[1,2]}}
示例代码
-- -------------------- ---- ------- ----- -------- - ------------------------------ ----- --------- - ------------------------------- ----- ---- - - ----- ----- ---- --- ------- - ---- ---- -------- - --------- ----- ----- ---- - - -- ----- ---- - - ----- ----- ---- --- ------- - ---- ---- -------- - --------- ----- ----- ---- - - -- ------------------------ ------------------------ -------- -- ----- -- --------- -----------------------------------------------------------------------------------------------------
常见错误
使用 object-deep-differ 进行深度比较时,有两个常见错误:
1、部分属性没有比较
如果比较的两个对象有一个属性值为 undefined,那么 object-deep-differ 不会进行比较,这种情况下,需要手动判断 undefined 属性。
-- -------------------- ---- ------- ----- -------- - ------------------------------ ----- --------- - ------------------------------- ----- ---- - - ----- ----- ---- ---------- ------- -- -- ----- ---- - - ----- ----- ---- --- ------- -- -- ----- ---- - -------------- ------ ------------------------ ----------------- -- ----- -- -------- -- ----------------------- -- --------------- --- -- - ----- ---------- --------- - --------- -- --------- --- --------- -- -------- --- ---------- - ------------------ ----- ------------ - -
2、比较结果包含循环引用
如果比较的两个对象中存在循环引用,比较结果会包含循环引用的属性,此时需要使用 json-stringify-safe 进行安全检查。
-- -------------------- ---- ------- ----- -------- - ------------------------------ ----- --------- - ------------------------------- ----- - - - -- - -- - - -- ----- - - - -- - -- - - -- ------------------------ --------------------- ----- -- --------- ----------------- ----- -- - --- ----- -- - - ---- -- -- ------ - --- ------------------------ ---------------------- ------ -- --------- --------------------
总结
object-deep-differ 可以快速实现深度对象比较,避免手动逐个比较的繁琐过程。但在使用过程中需要注意安全检查和常见错误的处理。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066f9d3d1de16d83a67029