1. 前言
在前端开发中,经常会需要对数组去重操作。如果只是简单的去重,可以使用 ES6 中的 Set
类型或者 Array.from(new Set(arr))
的方式。但是如果需要根据某些属性值去重,则需要使用类似于 lodash 的工具库来达到目的。
其中,lodash.uniqwith 是 lodash 工具库中数组去重的一个方法,它可以根据自定义的比较函数,对数组进行去重操作。本文将详细介绍 lodash.uniqwith 的使用方法。
2. 安装
首先,需要使用 npm 安装 lodash 和 lodash.uniqwith:
npm install lodash npm install lodash.uniqwith
3. 使用
使用 lodash.uniqwith 去重数组时,需要传入两个参数:要去重的数组和一个自定义的比较函数。
3.1 比较函数
比较函数用于确定两个元素是否相等。它接受两个参数,分别是要比较的元素。如果它们相等,则返回 true;否则返回 false。
例如,比较函数可以是这样的:
function compare(a, b) { return a.id === b.id; }
对于一个包含多个对象的数组,如果每个对象的 id 属性都是唯一的,那么根据 id 属性进行去重,就可以使用上述的比较函数了。
3.2 去重数组
看一个例子,下面的数组中包含多个对象:
const arr = [ { id: 1, name: '张三', age: 18 }, { id: 2, name: '李四', age: 19 }, { id: 1, name: '张三', age: 18 }, { id: 3, name: '王五', age: 20 } ];
要根据 id 属性去重,可以这样写:
import uniqWith from 'lodash.uniqwith'; const newArr = uniqWith(arr, compare); console.log(newArr);
结果为:
[ { id: 1, name: '张三', age: 18 }, { id: 2, name: '李四', age: 19 }, { id: 3, name: '王五', age: 20 } ]
3.3 注意事项
需要注意的是,lodash.uniqwith 方法会将传入的数组和返回的数组视为两个不同的数组对象。比如,以下代码是不会去重的:
-- -------------------- ---- ------- ----- --- - - - --- -- ----- ----- ---- -- -- - --- -- ----- ----- ---- -- -- - --- -- ----- ----- ---- -- -- - --- -- ----- ----- ---- -- - -- ----- ------ - ------------- --------- --------------- --- -------- -- -----
因此,在使用该方法时,需要将去重后的数组赋值给原数组,这样才能达到预期的效果。比如:
-- -------------------- ---- ------- ----- --- - - - --- -- ----- ----- ---- -- -- - --- -- ----- ----- ---- -- -- - --- -- ----- ----- ---- -- -- - --- -- ----- ----- ---- -- - -- ----- ------ - ------------- --------- ------------- ----------- ----------- -----------------
结果为:
[ { id: 1, name: '张三', age: 18 }, { id: 2, name: '李四', age: 19 }, { id: 3, name: '王五', age: 20 } ]
4. 总结
lodash.uniqwith 是 lodash 工具库中数组去重的一个方法,它可以根据自定义的比较函数,对数组进行去重操作。在使用该方法时,需要注意将去重后的数组赋值给原数组。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/58583