Javascript 使用map reduce函数而不是forEach重构JS对象

Javascript 使用map reduce函数而不是forEach重构JS对象,javascript,Javascript,这种重构可以用高阶函数(map/reduce)来完成吗测试数据减少(函数(x,r,)… 我似乎只能通过如下所示的forEach循环来完成 const test\u dat={ 国家:'巴西', 时间线:{ 案例:{ '4/1/20': 6836, '4/2/20': 8044, '4/3/20': 9056, '4/4/20': 10360, '4/5/20': 11130, '4/6/20': 12161, '4/7/20': 14034, '4/8/20': 16170, '4/9/20'

这种重构可以用高阶函数(map/reduce)来完成吗<代码>测试数据减少(函数(x,r,)…

我似乎只能通过如下所示的forEach循环来完成

const test\u dat={
国家:'巴西',
时间线:{
案例:{
'4/1/20': 6836,
'4/2/20': 8044,
'4/3/20': 9056,
'4/4/20': 10360,
'4/5/20': 11130,
'4/6/20': 12161,
'4/7/20': 14034,
'4/8/20': 16170,
'4/9/20': 18092,
'4/10/20': 19638,
'4/11/20': 20727,
'4/12/20': 22192,
'4/13/20': 23430,
'4/14/20': 25262,
'4/15/20': 28320,
'4/16/20': 30425,
'4/17/20': 33682,
'4/18/20': 36658,
'4/19/20': 38654,
'4/20/20': 40743,
'4/21/20': 43079,
'4/22/20': 45757
},
死亡人数:{
'4/1/20': 240,
'4/2/20': 324,
'4/3/20': 359,
'4/4/20': 445,
'4/5/20': 486,
'4/6/20': 564,
'4/7/20': 686,
'4/8/20': 819,
'4/9/20': 950,
'4/10/20': 1057,
'4/11/20': 1124,
'4/12/20': 1223,
'4/13/20': 1328,
'4/14/20': 1532,
'4/15/20': 1736,
'4/16/20': 1924,
'4/17/20': 2141,
'4/18/20': 2354,
'4/19/20': 2462,
'4/20/20': 2587,
'4/21/20': 2741,
'4/22/20': 2906
}
}
}
常量重新构造=[]
让cases\u d=test\u dat.timeline.cases
让死亡=测试日期时间线死亡
常量键=对象键(cases\u d);
键。forEach(功能(键){
重组推送({
日期:,
案例:案例[key],
死亡人数:死亡人数[关键],
});
});

log(重组)
您可以获取键并映射所需的值

const
数据={国家:'巴西',时间线:{案例:{ '4/1/20': 6836, '4/2/20': 8044, '4/3/20': 9056, '4/4/20': 10360, '4/5/20': 11130, '4/6/20': 12161, '4/7/20': 14034, '4/8/20': 16170, '4/9/20': 18092, '4/10/20': 19638, '4/11/20': 20727, '4/12/20': 22192, '4/13/20': 23430, '4/14/20': 25262, '4/15/20': 28320, '4/16/20': 30425, '4/17/20': 33682, '4/18/20': 36658, '4/19/20': 38654, '4/20/20': 40743,“4/21/20”:43079;“4/22/20”:45757},死亡人数:{ '4/1/20': 240, '4/2/20': 324, '4/3/20': 359, '4/4/20': 445, '4/5/20': 486, '4/6/20': 564, '4/7/20': 686, '4/8/20': 819, '4/9/20': 950, '4/10/20': 1057, '4/11/20': 1124, '4/12/20': 1223, '4/13/20': 1328, '4/14/20': 1532, '4/15/20': 1736, '4/16/20': 1924, '4/17/20': 2141, '4/18/20': 2354, '4/19/20': 2462, '4/20/20': 2587, '4/21/20': 2741, '4/22/20': 2906 } } },
{病例,死亡人数}=data.timeline,
结果=Object.keys(cases.map)(日期=>({
日期,
案例:案例[日期],
死亡人数:死亡人数[日期]
}));
console.log(结果);

。作为控制台包装{max height:100%!important;top:0;}
虽然@Nina的答案回答了这个问题,但我认为这会很有用

想象一幅
地图
,如下所示:

函数映射(数组,fn){
常量结果=[];
array.forEach((i)=>{
结果:推挤(fn(i));
});
返回结果;
}

当然。
forEach
+无条件的
推送
=
地图
。你试过了吗?你的钥匙总是一样的吗?是的-钥匙总是一样的。@bergi你是说我在这里做的基本上是一张地图?很抱歉,我对地图很陌生JS@jwillis0720确实如此。但它与javascript没有特别的关系。这是great.日期字段如何知道它被称为
“date”:“4/3/20”
?如果你只是传递一个从未被称为date的key对象?JS如何将其重新转换为key,value?@jwillis0720这是一种特殊的语法,当key时,存储数据的变量名是相同的。aha。因此,如果我提供了一个新名称,我可以做
mysuperduperdatefield:date
但是如果我不使用它,JS会重命名key与变量名相同。这是否有名称?我在哪里可以了解它。
date,cases:cases[date],
date没有
key:value
,而您只是使用了
date
,JS知道将其扩展为
“date”:“4/1/20202”