为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁华开满天机 2021-06-06 14:22:32
如果我们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,推动项目,以一些新的阵列,但有一些现成的去功能呢?
查看完整描述

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) });

 }


查看完整回答
反对 回复 2021-06-11
?
蛊毒传说

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)


查看完整回答
反对 回复 2021-06-11
?
大话西游666

TA贡献1817条经验 获得超14个赞

map,filter并且find回调只返回一个布尔值,而方法本身决定如何在最后返回。使用reduce,您的回调可以返回任何内容,而这正是 的返回值reduce。所以:


console.log(['foo', 'bar', 'baz'].reduce((a, i) => [...a, ...a, i], []))


areduce产生的元素多于其输入的示例。


查看完整回答
反对 回复 2021-06-11
  • 3 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信