例如: 我们有如下集合,我们的目的是:若元素属性值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多行基础转换的代码才得出结果。当然,这不是面试官想要的答案,结果也可想而知。然而就在前两天遇到了一个需要上述转换的一个需求,便写下了上面的代码,也希望这份代码能帮到你。