在前端开发中,我们经常需要比较两个对象或数组是否相等。虽然 JavaScript 提供了 ==
和 ===
这两种比较方式,但它们只能判断基本类型的值是否相等,对于复杂类型如对象和数组就无法直接比较了。npm 包 fast-equals 则提供了一种快速有效的比较方式,本文将介绍 fast-equals 的使用教程。
安装
可以通过 npm
安装 fast-equals:
npm install fast-equals
使用方法
fast-equals 可以比较任意深度的对象和数组是否相等,包括嵌套的对象和数组。它的比较方式与 JSON.stringify()
相似,但是比 JSON 更严谨,因为它能够处理 NaN 和 Infinity 等特殊值。
比较对象
比较两个对象是否相等,可以使用 fequals()
方法:
const { fequals } = require('fast-equals'); const obj1 = {a: 1, b: [2, 3]}; const obj2 = {b: [2, 3], a: 1}; console.log(fequals(obj1, obj2)); // true
注意,fast-equals 在比较对象时,会自动忽略对象的属性顺序。
比较数组
比较两个数组是否相等,可以使用 aequals()
方法:
const { aequals } = require('fast-equals'); const arr1 = [1, [2, 3]]; const arr2 = [[2, 3], 1]; console.log(aequals(arr1, arr2)); // true
与比较对象类似,fast-equals 在比较数组时也会忽略元素顺序。
比较深度嵌套的对象或数组
如果要比较深度嵌套的对象或数组,可以使用 fequals()
或 aequals()
方法,并设置 options
参数的 deep
属性为 true
:
const { fequals } = require('fast-equals'); const obj1 = {a: [{b: 1}, {c: [2, 3]}]}; const obj2 = {a: [{c: [3, 2]}, {b: 1}]}; console.log(fequals(obj1, obj2, { deep: true })); // true
总结
fast-equals 可以帮助我们快速有效地比较复杂类型的数据是否相等。需要注意的是,在比较深度嵌套的对象或数组时,需要设置 options
参数的 deep
属性为 true
。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/48604