javascript - 如何将对象数组重新映射到新数组中
问题描述
我有这个初始数组:
const initialData = [
{
day: 1,
values: [
{
name: 'Roger',
score: 90,
},
{
name: 'Kevin',
score: 88,
},
{
name: 'Steve',
score: 80,
},
],
},
{
day: 2,
values: [
{
name: 'Roger',
score: 70,
},
{
name: 'Michael',
score: 88,
},
],
},
{
day: 3,
values: [
{
name: 'Steve',
score: 97,
},
],
},
];
转换为:
const result = [
{
name: 'Roger',
scores: [90, 70, null],
},
{
name: 'Kevin',
scores: [88, null, null],
},
{
name: 'Steve',
scores: [80, null, 97],
},
{
name: 'Michael',
scores: [null, 88, null],
},
];
我正在尝试使用数组map
并创建临时数组:
const holder = [];
initialData.map()
但无济于事
解决方案
您可以通过几个步骤来执行此操作 - 首先reduce
您可以按名称索引,然后将map
这些条目设置为您期望的格式
const initialData = [{day:1,values:[{name:"Roger",score:90},{name:"Kevin",score:88},{name:"Steve",score:80}]},{day:2,values:[{name:"Roger",score:70},{name:"Michael",score:88}]},{day:3,values:[{name:"Steve",score:97}]}];
var result = Object.entries(initialData.reduce( (acc,item) => {
item.values.forEach( v => {
if(!acc[v.name]) acc[v.name] = {};
acc[v.name][item.day] = v.score;
});
return acc;
},{})).map( ([name,days]) => ({
name,
scores: new Array(initialData.length).fill(null).map( (_,i) => days[i+1] || null)
}))
console.log(result);
推荐阅读
- html - 使绝对定位的轮播响应
- python - 检查的有效实现:对于数组中的每个元素,检查它是否存在于另一个数组中
- docker - 无法在 dockerfile 中获取 heroku $port
- python - python有没有可以从Web of Science或Scopus获取记录的包?
- ansible - 如何将配置项从ansible playbook传递给snow
- javascript - 使用 Angular javascript 的 json 日期格式
- jquery - 防止用户使用 Enter 提交表单,但在一个表单输入字段上启用 Enter 键
- php - 如何扩展基于 Codeigniter 2.1.3 构建的购买产品(Multiscraper)中的类
- xamarin - Xamarin 表单的 AWS cognito 登录问题,NotAuthorizedException:用户名或密码不正确
- python - 一行分配与多行分配有什么区别