有时候在前端开发中,需要比较两个对象是否相等,但是 JavaScript 中提供的 ==
或 ===
无法满足需求,因为它们比较的是值,而不是对象结构。这时候我们可以使用 npm 包 kinda-equal
来解决这个问题。
安装
在终端中运行以下命令进行安装:
npm install kinda-equal
使用
对象比较
通过 kindaEqual
函数可以比较两个对象是否相似。示例:
const kindofequal = require('kinda-equal'); const obj1 = { a: 1, b: [1, 2, 3] }; const obj2 = { a: 1, b: [1, 2, 3] }; console.log(kindofequal(obj1, obj2)); // true
输出结果为 true
。这是因为 obj1
和 obj2
的属性和属性值都相同。
数组比较
在比较数组时,需要用 kindaEqualArray
函数。示例:
const kindofequal = require('kinda-equal'); const arr1 = [1, 2, 3, { a: 1, b: [1, 2, 3] }]; const arr2 = [1, 2, 3, { a: 1, b: [1, 2, 3] }]; console.log(kindofequal(kindofequal.array(arr1), kindofequal.array(arr2))); // true
输出结果也为 true
。
比较含有 undefined
的对象
如果平常习惯使用 {}
来定义一个空对象,会发现 kindaEqual
函数无法比较含有 undefined
的空对象。此时应使用 kindaEqualEmptyObject
函数。示例:
const kindofequal = require('kinda-equal'); const obj1 = {}; const obj2 = {}; obj1.a = undefined; console.log(kindofequal.kindofequalEmptyObject(obj1, obj2)); // true
输出结果为 true
。
比较含有循环引用的对象
kinda-equal
还支持比较含有循环引用的对象。示例:
-- -------------------- ---- ------- ----- ----------- - ----------------------- ----- ---- - --- ----- ---- - --- ------ - ----- ------ - ----- ----------------------------- ------- -- ----
同时 kinda-equal
也支持含有循环结构的数组比较,使用 kindaEqualArray
即可。
总结
使用 kinda-equal
对象可以方便地进行对象以及数组的比较,特别是针对一些特殊情况,如含有 undefined
、循环引用等情况,提供了很好的解决方案。在前端开发时,可以使用它作为常用工具之一,提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600563f781e8991b448e140c