数组对象去重

预计阅读时间: 2 分钟

需求:

多组数组元素组合拼接,最终导致数组中有一些重复出现的元素。现将数组中重复的元素剔除掉,最终得到一组没有重复数据的新数组对象。

解决方法:

采用 reduce() 处理数组元素,达到最终目的;

  • reduce()方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值;
  • reduce()可以作为一个高阶函数,用于函数的 compose;
注意:

reduce()对于空数组是 不会执行回调函数

语法:

代码示例
1array.reduce(function(total,currentValue, currentIndex, arr),initialValue)
  • 参数列表:

    参数描述
    total必需。初始值,或者计算结束后的返回值。
    currentValue必需。当前元素。
    currentIndex可选。当前元素索引
    arr可选。当前元素所属的数组对象
    initialValue可选。传递给函数的初始值

实现代码:(过滤数组对象中的重复元素)

代码示例
1const filterArray = array => {
2	let tmp = {};
3	let tmpArray = array.reduce((total, item) => {
4		tmp[item.id] ? "" : (tmp[item.id] = total.push(item));
5		return total;
6	}, []);
7	return tmpArray;
8};

实例使用:

代码示例
1// 使用
2let testArray = [{
3	id: 1,
4	name: 'zhangsan'
5}, {
6	id,
7	2,
8	name: 'lisi'
9}, {
10	id: 1,
11	'zhangsan'
12}, {
13	id: 4,
14	name: 'wangwu'
15}];
16// 过滤后数据
17let newArray = filterArray(testArray);
18
19newArray = [{
20	id: 1,
21	name: 'zhangsan'
22}, {
23	id,
24	2,
25	name: 'lisi'
26}, {
27	id: 4,
28	name: 'wangwu'
29}];