目前,我的数据是一个数组,其中包含大量的对象,格式如下:
[
{ name: 'example' },
{ name: 'example' },
...
]我要做的是在给定的时间间隔( 20 )内将这个列表转换为对象数组。
我想要这种格式:
[
[
{ name: 'example' },
{ name: 'example' },
...18 more rows
],
[
{ name: 'example' },
{ name: 'example' },
...18 more rows
],
]图表数据包含初始格式的数据,我正在尝试获得'newArray‘的新格式。为了实现这一点,我指出:
let newArray = [];
let data = [];
chartdata.forEach((x, i) => {
if(i === chartdata.length - 1 ){
newArray.push(data)
data = []
}
if(i%20===0){
newArray.push(data)
data = []
}
data.push(x);
})
console.log('newArray',newArray)有两件事我不明白。
控制台日志显示了以下内容:

为什么newArray的第一个索引中有一个空数组?
为什么newArray的索引4只有19个值?
第一个问题很容易解决,但是第二个问题我不明白如何解决。有人能帮忙吗?
发布于 2021-02-23 14:36:16
如果您愿意将其他包集成到该项目中,我相信来自Lodash的函数chunk正好达到了这个目的:https://lodash.com/docs/4.17.15#chunk。
代码变得非常简单(并且非常清楚正在发生的事情):
const chunks = _.chunk(chartdata, 20);一般来说,由于您似乎将大量使用数组,请考虑将Lodash集成到您的项目中,库的目标正是您希望对数组执行的许多操作。在我的项目中,我在图书馆工作了几年,很少(如果有的话)会遇到他们的功能不涵盖的操作。
有一些关于优化的建议,但老实说,当涉及到包大小时,我从来没有发现导入整个库是一个问题。
发布于 2021-02-23 14:33:57
let i,j, newArray = [],chunk = 20;
for (i=0,j=chartdata.length; i<j; i+=chunk) {
newArray.push(chartdata.slice(i,i+chunk));
}https://stackoverflow.com/questions/66334907
复制相似问题