3 回答
TA贡献1806条经验 获得超5个赞
但是否有一些现成的功能呢?
不幸的是没有。其他语言(例如 Kotlin),确实有chunk方法。
然而,这可以通过 来实现.flatMap,但是“旧循环”在这里工作得更好:
const result = [], size = 3;
for(const { nodes } of myArray) {
for(let i = 0; i < nodes.length; i += size)
result.push({ nodes: nodes.slice(i, i + size) });
}
TA贡献1895条经验 获得超3个赞
使用Array.flatMap()我们迭代原始数组,使用chunks方法(基于Array.from())将nodes数组拆分为多个数组,然后将它们映射,并将每个数组包装在一个对象中。flatMap 将结果转换回单个数组。
const myArray = [
{nodes: Array(5)},
{nodes: Array(3)},
{nodes: Array(3)}
]
const chunks = chunkSize => arr => Array.from({ length: Math.ceil(arr.length / chunkSize) }, (_, i) =>
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)
TA贡献1817条经验 获得超14个赞
map,filter并且find回调只返回一个布尔值,而方法本身决定如何在最后返回。使用reduce,您的回调可以返回任何内容,而这正是 的返回值reduce。所以:
console.log(['foo', 'bar', 'baz'].reduce((a, i) => [...a, ...a, i], []))
areduce产生的元素多于其输入的示例。
添加回答
举报