javascript - 将对象数组转换为嵌套对象数组
问题描述
实际上,我有一组要转换的对象。
[
{ "val1":"2.0" },
{ "val2":"2.0" },
{ "val3":"2.0" },
{ "val1":"4.0" },
{ "val2":"2.0" },
{ "val3":"4.7" },
{ "val1":"4.0" },
{ "val2":"4.0" },
{ "val3":"4.0" }
]
我应该每三个项目把它们和一个父项目放在一个单独的数组中。
我会将其转换为这种格式
[
[
"20190201",
[
{ "val1":"2.0" },
{ "val2":"2.0" },
{ "val3":"2.0" }
]
],
[
"20190202",
[
{ "val2":"2.0" },
{ "val3":"2.0" },
{ "val1":"4.0" }
]
]
]
其实这就是我做的
const returnData= fileDateName.map((_fileDate: string, _index: number) => {
return [_fileDate, [
filteredData[_index],
filteredData[_index + 1],
filteredData[_index + 2],
]];
});
我的实际问题是我的输出不采用接下来的三个值,但每次它移动一个项目然后采用下一个值。我认为这是因为该_index
值没有按应有的方式增加。
Index =0
filteredData[0],
filteredData[1],
filteredData[2],
index=1
filteredData[1],
filteredData[2],
filteredData[3],
...
但迭代应该使
Index =0
filteredData[0],
filteredData[1],
filteredData[2],
index=3
filteredData[3],
filteredData[4],
filteredData[5],
...
编辑
FileDateName= ["20190201","20190202","20190203"]
它如何在每次迭代时设置索引值?
解决方案
你可以使用 Array#map 和 Array#slice 来做这样的事情。获取日期的索引并将其乘以 3 以找到应该获取数据的起始位置。
const dates = [20190201, 20190202, 20190203]
const data=[{"val1":"2.0"},{"val2":"2.0"},{"val3":"2.0"},{"val1":"4.0"},{"val2":"2.0"},{"val3":"4.7"},{"val1":"4.0"},{"val2":"4.0"},{"val3":"4.0"}]
const res = dates.map((date, index)=>{
const start = index * 3;
const end = start + 3;
return [
date,
data.slice(start, end)
]
});
console.log(res);
推荐阅读
- python - 为什么我得到 Keras 形状不匹配?
- docker - 通过 Caddy 保护最重要的连接,但 websocket 不起作用
- python - 写保护类范围
- database - 具有不同条目的用户定义列的 SQL 数据库
- ios - 如何利用 iOS 中的多个处理器内核来实现访问共享数据的循环的最快/最短计算?
- angular - 如何在 Angular 6 中为 jasmine 测试用例模拟事件停止传播
- python - 在 tkinter 画布中定位标签
- python - 如何使用矢量化方法将创建多个新列的函数应用于熊猫数据框?
- python - 执行远程源代码时“没有这样的文件或目录”
- java - Mapstruct 在实现中添加注释