判断数组对象的集合中若干属性相等,则累加指定属性值(reduce和findIndex的结合使用)

5 篇文章 0 订阅

例如: 我们有如下集合,我们的目的是:若元素属性值a,属性值b,属性值c的值都相同,则累加属性d的值:

let list =[
{a: 1,b: 2,c: 3,d: 1},
{a: 1,b: 2,c: 3,d: 2},
{a: 1,b: 2,c: 4,d: 3},
{a: 1,b: 2,c: 4,d: 4},
{a: 1,b: 2,c: 3,d: 5}
]

最后需要得到的集合如下:

result =[
{a: 1,b: 2,c: 3,d: 8},
{a: 1,b: 2,c: 4,d: 7}
]

我的代码:

let list=[
{a: 1,b: 2,c: 3,d: 1},
{a: 1,b: 2,c: 3,d: 2},
{a: 1,b: 2,c: 4,d: 3},
{a: 1,b: 2,c: 4,d: 4},
{a: 1,b: 2,c: 3,d: 5}
]
let index =''
let result =list.reduce((init, currentValue, currentIndex, arr) =>{
	index =init.findIndex(cur=>
		cur.a ==currentValue.a &&
		cur.b ==currentValue.b &&
		cur.c ==currentValue.c)
	if(index !=-1){
		init[index].d +=currentValue.d
	}else {
		init.push(currentValue)
	}
    return init
}, [])

写在最后:
两年前参加一次面试,其中在笔试环节就有两道解答题目涉及到上述的逻辑转换,当时我在试卷上洋洋洒洒的写下了30多行基础转换的代码才得出结果。当然,这不是面试官想要的答案,结果也可想而知。然而就在前两天遇到了一个需要上述转换的一个需求,便写下了上面的代码,也希望这份代码能帮到你。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

这世界反了

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

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

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

打赏作者

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

抵扣说明:

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

余额充值