简介
deep-equal-ext
是一个在 JavaScript 中对比两个对象是否相等的工具库。相比于 lodash.isEqual()
,deep-equal-ext
在某些特定场景下性能更优,同时也支持一些扩展的对比方式。
安装
可以通过 npm 安装:
npm install deep-equal-ext --save
使用
基本用法
deep-equal-ext
的最简单用法是比较两个对象是否深度相等:
-- -------------------- ---- ------- ----- ------- - -------------------------- ----- ---- - - -- - -- ------- -- -- --- -- -- -- ----- ---- - - -- - -- ------- -- -- --- -- -- -- ------------------------- ------- -- ----
配置选项
deep-equal-ext
支持通过配置选项修改对比行为:
-- -------------------- ---- ------- ----- ------- - -------------------------- ----- ---- - - -- - -- ------- -- -- --- -- -- -- ----- ---- - - -- - -- ------- -- -- --- -- -- -- ------------------------- ----- - ------- ---- ---- -- -----
目前支持的配置选项有:
strict
: 是否区分大小写,默认为false
。strictFields
: 在 strict 模式下,指定需要区分大小写的属性或字段名数组。sort
: 是否对数组进行排序后再比较,默认为false
。sortWith
: 比较数组时使用的比较函数。
例如,可以使用 sort
选项使得以下两个对象被认为相等:
-- -------------------- ---- ------- ----- ---- - - -- --- -- -- -- ----- ---- - - -- --- -- -- -- ------------------------- ----- - ----- ---- ---- -- ----
扩展对比
deep-equal-ext
支持通过扩展,对某些类型的数据进行更精细的对比而不是简单的引用相等性。目前包括以下扩展。
date
对比两个 Date
类型的对象。
const date1 = new Date('2021-07-01'); const date2 = new Date('2021-07-01'); console.log(isEqual(date1, date2)); // false console.log(isEqual(date1, date2, { extensions: ['date'] })); // true
regexp
对比正则表达式。
const reg1 = /hello/i; const reg2 = /hello/i; console.log(isEqual(reg1, reg2)); // false console.log(isEqual(reg1, reg2, { extensions: ['regexp'] })); // true
symbol
对比 Symbol
类型的变量。
const sym1 = Symbol('hello'); const sym2 = Symbol('hello'); console.log(isEqual(sym1, sym2)); // false console.log(isEqual(sym1, sym2, { extensions: ['symbol'] })); // true
set
对比 Set
类型的存储。
const set1 = new Set([1, 2, 3]); const set2 = new Set([3, 2, 1]); console.log(isEqual(set1, set2)); // false console.log(isEqual(set1, set2, { extensions: ['set'] })); // true
map
对比 Map
类型的存储。
const map1 = new Map([['a', 1], ['b', 2]]); const map2 = new Map([['b', 2], ['a', 1]]); console.log(isEqual(map1, map2)); // false console.log(isEqual(map1, map2, { extensions: ['map'] })); // true
总结
deep-equal-ext
是一个十分实用的工具库,让对象的深度对比更加方便和精准。通过配置选项和扩展对比方式,我们可以更好地控制对比行为,享受更好的编码体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005731781e8991b448e94de