javascript - 在 JavaScript 中使用“reduce”从另一个数组创建新数组
问题描述
我有一个数组/列表,例如:
var mydata = [
{"endTime": "123",
"startTime": "2323",
"lob" : ["a", "b", "c"]
},
{
"endTime": "454",
"startTime": "3232",
"lob" : ["a", "b"]
},
{
"endTime": "4545",
"startTime": "2322",
"lob" : ["c"]
}
]
我想通过这个数组映射并创建另一个列表,每个“lob”和 [startTime, endTime] 都被添加到一个列表中,如下所示:
[
{"item": "a" , timeRange: [123, 2323] },
{"item": "b" , timeRange: [123, 2323] },
{"item": "c" , timeRange: [123, 2323] },
{"item": "a" , timeRange: [454, 3232] },
{"item": "b" , timeRange: [454, 3232] },
{"item": "c" , timeRange: [4545, 2322] },
]
如何使用reduce创建我的新列表?
我努力了:
var mymap = mydata.reduce((x, y) =>
y.lob.map((lob, index) => {
x.push({"item": lob, "timeRange": [y.startTimestamp, y.endTimestamp]})
})
), [])
我也尝试过使用地图。但如果我有大数据,我认为 reduce 会有更好的性能。考虑到性能,我正在寻找执行此操作的最佳方法
解决方案
与其使用 ,不如reduce()
考虑使用flatMap()
:
const mydata = [
{ endTime: '123', startTime: '2323', lob: ['a', 'b', 'c'] },
{ endTime: '454', startTime: '3232', lob: ['a', 'b'] },
{ endTime: '4545', startTime: '2322', lob: ['c'] }
];
const result = mydata.flatMap(
({ lob, startTime, endTime }) => lob.map(
item => ({ item, timeRange: [+startTime, +endTime] })
)
);
console.log(result);
推荐阅读
- django - 使用 django-allauth 测试 Django 视图
- angular - 如何从 resx 文件中获取数据并将 xlf 文件放入 angilar
- sails.io.js - 在 chrome devtools 的网络选项卡中找不到请求有效负载
- linux - 使用 sox 和 multimon-ng 从麦克风实时检测 DTMF 代码
- amazon-rds - AWS RDS Performance Insights 未显示 TOP SQL 查询
- .net-core - 使用基于令牌的身份验证调用 Power BI 报告服务器 Api
- python - Bokeh:为什么我需要调用 source.change.emit() 来更新 Span 的位置?
- ruby-on-rails - (RoR)如何通过 DataTime 将整数转换为数据
- java - Spring Cloud Contract - 从正则表达式随机生成的空路径参数
- java - 为 Java AWS 微服务应用程序执行“多服务”级联操作请求