javascript - 我有一个需要重组为所需格式的对象数组。我尝试使用迭代使用数组解构
问题描述
所需的输出应如下所示。我尝试了对象重组方式,但我无法将其作为对象推出。如果您能指导我,我可以使用哪些其他数组方法来获取所需的数组
const sample = [
{
name: 'Bike',
series: [
{ date: '01-01-2020', value: '4$' },
{ date: '02-01-2020', value: '3$' },
{ date: '03-01-2020', value: '3.5$' }
]
},
{
name: 'Watch',
series: [
{ date: '01-01-2020', value: '1$' },
{ date: '02-01-2020', value: '2$' },
{ date: '03-01-2020', value: '5$' }
]
}
]
const output = [
{ date: '01-01-2020', 'bike-value': '4$', 'watch-value': '1$' },
{ date: '02-01-2020', 'bike-value': '3$', 'watch-value': '2$' },
{ date: '03-01-2020', 'bike-value': '3.5$', 'watch-value': '5$'}
]
我尝试如下。但我不能把它变成一个对象来推入一个空数组。
for (const {name: n, series: [{date: d , value: v}]} of sample) {
console.log('name: ' + n + ', date: ' + d + ', value: ' + v);
}
解决方案
您可以遍历sample
数组,然后遍历每个series
数组。创建一个group
对象,每个对象都date
作为键,最终输出中需要的对象是值。用于以数组Object.values()
形式获取对象的值group
const sample=[{name:"Bike",series:[{date:"01-01-2020",value:"4$"},{date:"02-01-2020",value:"3$"},{date:"03-01-2020",value:"3.5$"}]},{name:"Watch",series:[{date:"01-01-2020",value:"1$"},{date:"02-01-2020",value:"2$"},{date:"03-01-2020",value:"5$"}]}];
const group = {}
for (const { name, series } of sample) {
for (const { date, value } of series) {
group[date] = group[date] || { date };
group[date][`${name.toLowerCase()}-value`] = value
}
}
const output = Object.values(group)
console.log(output)
组对象如下所示:
{
"01-01-2020": {
"date": "01-01-2020",
"bike-value": "4$",
"watch-value": "1$"
},
"02-01-2020": {
"date": "02-01-2020",
"bike-value": "3$",
...
},
"03-01-2020": {
....
}
推荐阅读
- python - Django:将 CSV 文件上传到 AWS S3
- javascript - 如何在网页上执行点击按钮?
- asp.net - 上传的图片在 Chrome 中消失
- r - dplyr 唯一条目的运行计数
- scala - 当 Option 为 None 时返回 Future 失败
- python - 使用 nltk 停用词从 pandas 列中的列表中删除停用词时,删除停用词失败
- python - 通过样本获取特征重要性 - Python Scikit Learn
- vue.js - 如何根据 vue 3 中的路由器历史记录在我的标题中显示和隐藏组件
- php - PHP WHILE 语句遍历数组长度
- go - 测试使用 TWIRP 开发的 RPC 服务