首页 > 解决方案 > 将数组数组减少为对象的平面数组

问题描述

我一直在转换数据结构:

let d = [
  { no: 1, score: 7000 },
  { no: 2, score: 10000 },
  [
    { no: 1, score: 8500 },
    { no: 2, score: 6500 }
  ]
];

    
d = d.reduce((accum, o) => {
   
}, [])

我怎样才能生产这个?

[{name: 'no 1', score: [7000, 8500]}, {name: 'no 2', score: [10000, 6500]}]

标签: javascriptarraystypescriptecmascript-6

解决方案


这是一种简单的方法reduce

const result = d.flat().reduce((acc: {name: string, score: number[]}[], curr) => {
  const { no, score } = curr;
  let item = acc.find(a => a.name === `no ${no}`);
  if (!item) {
    item = { name: `no ${no}`, score: []};
    acc.push(item);
  }

  item.score.push(score);
  return acc;
    
}, []);

console.log(result)

推荐阅读