Javascript 从对象数组创建对象数组

Javascript 从对象数组创建对象数组,javascript,arrays,Javascript,Arrays,当前我的数据是一个数组,其中包含一长串对象,格式如下: [ { name: 'example' }, { name: 'example' }, ... ] 我试图做的是将这个列表转换成一个给定间隔20的对象数组 我想要这种格式: [ [ { name: 'example' }, { name: 'example' }, ...18 more rows ], [ { name: 'example' }, { name: 'e

当前我的数据是一个数组,其中包含一长串对象,格式如下:

[ 
    { name: 'example' },
    { name: 'example' },
    ...
]
我试图做的是将这个列表转换成一个给定间隔20的对象数组

我想要这种格式:

[
  [
   { name: 'example' },
   { name: 'example' },
    ...18 more rows
   ],
  [
   { name: 'example' },
   { name: 'example' },
    ...18 more rows
  ],
]

chartdata包含初始格式的数据,我正在尝试以“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的第一个索引中有一个空数组

  • 谢谢,我已经添加了&&I!==第二个if语句中的0
为什么newArray的索引4只有19个值

第一个问题很容易解决,但是第二个问题我不知道如何解决。有谁能提供一些帮助吗?

让i,j,newArray=[],chunk=20;
let i,j, newArray = [],chunk = 20;
for (i=0,j=chartdata.length; i<j; i+=chunk) {
    newArray.push(chartdata.slice(i,i+chunk));
}

对于(i=0,j=chartdata.length;i如果您愿意将其他软件包集成到项目中,我相信Lodash提供的函数
chunk
正是为了这个目的:

代码变得非常简单(并且非常清楚发生了什么):

一般来说,因为看起来你将大量使用数组,考虑把LoaSHIs集成到你的项目中,这个库正好是你想要用数组执行的许多操作。我已经在我的项目中与图书馆工作了几年,而且几乎从来没有(如果有的话)。遇到了一个不属于他们职能范围的行动


有一些关于优化的问题,但老实说,当涉及到包大小时,我从未发现导入整个库是一个问题。

第一个数组是空的bcoz
0%20=0
,因此第二个条件变为真,空数组被推到最终的数组foreach((x,I)=>{})这里,在这一行中,x是当前元素,I是它的索引。在Javascript中,索引从0开始。因此对于第一个元素x,索引I=0&I%20==0为真(因为0%20等于0)&因此,在第2行代码中初始化的空数据数组被推送到newarray中,这就是newarray的索引0是空数组的原因。解释通常很有用
const chunks = _.chunk(chartdata, 20);