原数据结构:
const data = [
{
month:'2019-01',
list:[
{name:'语文',share:98},
{name:'数学',share:89},
{name:'其它',share:45},
]
},
{
month:'2019-02',
list:[
{name:'外语',share:34},
{name:'数学',share:56},
{name:'其它',share:33},
]
}
]
数据需求转换:
[
['month','2019-01','2019-02'],
['语文',98,0],
['数学',89,56],
['外语',0,34],
['其它',45,33],
]
思路如下(利用es6 flatMap扁平化数组取出所有name去重,遍历数据按条件加到数组中)
function filterArr( data ) {
return data.reduce((pre,cur) => {
pre.forEach((arr,i) => {
let v = i ? cur.list.find(name => name.name == arr[0]) : cur.month
arr.push(i ? (v ? v.share : 0) : v)
})
return pre;
},[...new Set(['month',...data.flatMap(v => v.list.map(_v => _v.name))])].map(v => [v]))
}