reduce方法高效实现对象数组去重

本文介绍了如何利用JavaScript的reduce方法实现对象数组的去重。通过提供一个累加器和当前元素,reduce方法可以避免传统遍历和比较的繁琐过程。在处理对象数组时,由于对象不能直接进行相等性比较,常规方法处理起来较为复杂。文章展示了使用reduce方法,结合空数组和特定条件判断,简化去重操作的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查阅资料我们可以知道reduce方法的定义

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值

从定义中看到这方法似乎是进行计算的,但其实除此之外,作为一个高级方法,它有很多骚操作
关于reduce的一些常规使用方法参考这里

reduce语法

array.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

accumulator:(累计器,累计回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue)
currentValue:(当前处理的元素)
index:(当前处理元素的索引)
array:(调用reduce的源数组)
initialValue:(作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错)

好了,方法介绍结束,下面来个骚操作,需求:对象数组中去掉重复的对象
对于一般数组来说常见的处理方式要么使用临时数组然后循环遍历,要么indexOf判断,高级一点使用ES6的新数据类型Set直接去重,但是对于对象数组本人亲自测试过,不好处理,还繁琐,下面直接上使用reduce方法的代码:

	var resources = [
            { name: "张三", age: "18" },
            { name: "张三", age: "19" },
            { name: "张三", age: "20" },
            { name: "李四", age: "19" },
            { name: "王五", age: "20" },
            { name: "赵六", age: "21" }
        ]
     var temp = {};
     resources = resources.reduce((prev, curv) => {
         // 如果临时对象中有这个名字,什么都不做
         if (temp[curv.name]) {
         }
         // 如果临时对象没有就把这个名字加进去,同时把当前的这个对象加入到prev中
         else {
             temp[curv.name] = true;
             prev.push(curv);
         }
         return prev
     }, []);
     console.log("结果", resources);

在这里插入图片描述
这里只需要注意initialValue得放一个空数组[],不然没法push,只要理解了reduce的处理过程,那么久很好理解它是怎么实现去重了,这里只根据名字去判断了,如果有其他的需求,仍然可以加判断以达到目的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要葱花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值