是否有一个数组函数产生的元素多于它接收的元素?

如果我们map在数组上使用- 我们将获得相同数量的元素。


如果我们想要更少的元素 - 我们可以根据情况使用filter,find或reduce。


是否有内置功能可以以另一种方式工作?


例如,假设我有一个这样的数组:


myArray = [

  {nodes: Array(5)}, // some array with 5 elements

  {nodes: Array(3)},

  {nodes: Array(3)}

]

我想将每个包含 3 个以上元素的数组拆分为最多 3 个元素的数组。所以最后我想得到:


splittedArray = [

  {nodes: Array(3)},

  {nodes: Array(2)},

  {nodes: Array(3)},

  {nodes: Array(3)}

]

我知道如何与遍历实现这一目标myArray用forEach,推动项目,以一些新的阵列,但有一些现成的去功能呢?


繁华开满天机
浏览 152回答 3
3回答

忽然笑

但是否有一些现成的功能呢?不幸的是没有。其他语言(例如 Kotlin),确实有chunk方法。然而,这可以通过 来实现.flatMap,但是“旧循环”在这里工作得更好:&nbsp;const result = [], size = 3;&nbsp;for(const { nodes } of myArray) {&nbsp; &nbsp; for(let i = 0; i < nodes.length; i += size)&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; result.push({ nodes: nodes.slice(i, i + size) });&nbsp;}

蛊毒传说

使用Array.flatMap()我们迭代原始数组,使用chunks方法(基于Array.from())将nodes数组拆分为多个数组,然后将它们映射,并将每个数组包装在一个对象中。flatMap 将结果转换回单个数组。const myArray = [&nbsp; {nodes: Array(5)},&nbsp; {nodes: Array(3)},&nbsp; {nodes: Array(3)}]const chunks = chunkSize => arr => Array.from({ length: Math.ceil(arr.length / chunkSize) }, (_, i) =>&nbsp; arr.slice(i * chunkSize, (i + 1) * chunkSize))const chunks3 = chunks(3)const result = myArray.flatMap(o => chunks3(o.nodes).map(nodes => ({ nodes })))console.log(result)

大话西游666

map,filter并且find回调只返回一个布尔值,而方法本身决定如何在最后返回。使用reduce,您的回调可以返回任何内容,而这正是 的返回值reduce。所以:console.log(['foo', 'bar', 'baz'].reduce((a, i) => [...a, ...a, i], []))areduce产生的元素多于其输入的示例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript