JS对象数组去重简单有效方法

I.输入

JS对象数组去重是业务经常遇到的方法,稍微简洁一点的方法,如下:

var data = [
  {"id": 1, "name": "李四1"},
  {"id": 1, "name": "李四2"},
  {"id": 1, "name": "李四3"},
  {"id": 1, "name": "李四1"},
  {"id": 5, "name": "李四5"},
];

P.去重方法(JS版本)

function ArrSet(Arr, id) {
  var obj = {};
  const arrays = Arr.reduce((setArr, item) => {
    obj[item[id]] ? '' : obj[item[id]] = true && setArr.push(item);
    return setArr;
  }, []);
  return arrays;
}

console.log(ArrSet(data, 'id'));
console.log(ArrSet(data, 'name'));

P.去重方法(TS版本)

function ArrSet<T extends any>(Arr: T[], id: keyof T): T[] {
	let obj: Object = {}
	const arrays = Arr.reduce((setArr, item) => {
		obj[`${item[id]}`] ? '' : (obj[`${item[id]}`] = true && setArr.push(item))
		return setArr
	}, [])
	return arrays
}

O.打印台结果

在这里插入图片描述

总结:思路分析

reduce()是数组的并归方法,其接受四个参数。
reduce(上一个并归值,当前项,当前项的索引,数组本身)
例:使用reduce()函数执行累加数组中所有数组的操作

    let values = [1,2,3,4,5,6];
    let sum = values.reduce((prev, cur, index, array) => prev + cur);

    console.log(sum) // 打印出21

显然函数每次迭代返回prev + cur,然后prev + cur 成为下一次的prev值来进行迭代,最终返回的就是
(1+ 2) + 3) + 4) + 5) + 6的过程。最后返回归并结果。
*注:方法reduce()还有一个类似方法reduceRight(),只是方向相反,并没有别的不同。

参考文献

[1] JavaScript高级程序设计(第四版)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值