![](/img/trans.png)
[英]How to convert a javascript array of Objects from one format to another format?
[英]How can I sort / map / filter the following javascript array of objects from one format to another
我有
const daterange = ["2021-01", "2021-02", "2021-03", "2021-04", "2021-05"]
const personData = [
{
"2021-05": 3,
"2021-04": 7,
"2021-03": 4,
"2021-02": 14,
"2021-01": 7
"person": {
name: 'john',
age: 33
},
},
{
"2021-05": 1,
"2021-04": 2,
"2021-03": 3,
"2021-02": 4,
"2021-01": 9
"person": {
name: 'sarah',
age: 50
},
},
{
"person": {
name: 'mark',
age: 14
},
},
]
我希望它看起来像这样
const formatted = [
{
date: '2021-01',
john: 7,
sarah: 9,
mark: 0,
},
{
month: '2021-02',
john: 14,
sarah: 4,
mark: 0,
},
... ALL THE OTHER MONTHS IN THE daterange shown here
],
日期范围可能会更改,如果 personData 中没有数据,则应为该人的每个月分配一个 0(零)值
我尝试过在 dateRange 上进行映射,然后在 personData 中寻找匹配项(hasOwnProperty),但它不起作用。
编辑。
由于 Andreas 发牢骚,我添加了我所拥有的,但我不确定它对任何人都有帮助。 我被卡住了,这就是重点吗?
daterange.map((date) => {
personData.map((person) => {
person.hasOwnProperty(date) === true
}
})
您需要循环数月并通过遍历人员数据为每个月构建一个 object
const formatted = daterange.map(month => {
const result = {
month,
}
personData.forEach(personData => {
if (personData[month] != null) {
result[personData.name] = personData[month];
} else {
result[personData.name] = 0;
}
});
return result;
})
试试这个解决方案
const format = (range, data) => {
return range.map(month => {
return data.reduce((prev, cur) => {
prev[cur.person.name] = cur[month] ?? 0;
return prev;
}, { date: month })
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.