Reduce

105 阅读1分钟
// 去重数组的name并且计算相同name的次数,过滤相同name时time的最大值,
// 输出实例:[ {"name":"www","time":110,"count":3}, {"name":"aaa","time":220,"count":4}, {"name":"ddd","time":30,"count":1}
// {"name":"bbb","time":60,"count":1}]

let arr = [{ "name": "www", "time": 110 },
{ "name": "aaa", "time": 180 },
{ "name": "aaa", "time": 220 },
{ "name": "ddd", "time": 30 },
{ "name": "aaa", "time": 190 },
{ "name": "www", "time": 80 },
{ "name": "www", "time": 90 },
{ "name": "aaa", "time": 220 },
{ "name": "bbb", "time": 60 },
]

let res = arr.reduce((a, c) => {
  let item = a.find(v => v.name === c.name)
  if (item) {
    item.count++;
    item.time = Math.max(item.time, c.time)
  } else {
    a.push({ ...c, count: 1 })
  }
  return a
}, [])

console.log(res);