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

为什么数组在reduce中不可迭代

为什么数组在reduce中不可迭代

慕慕森 2021-04-26 13:14:35
我想按偶数和奇数元素拆分数组,这是我的代码A.reduce((a,v,i)=> v % 2 == 0 ? [...a[0],v] : [...a[1],v],[[],[]])A是数字数组。我不明白为什么会出现错误a [1]是不可迭代的吗?考虑到此代码可以正常工作:let arr = [[],[]];  console.log([...arr[1], 4]);
查看完整描述

3 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

您只在中返回一个数组reduce()。您还需要返回第二个。在第一次迭代中,ais [[],[]]。但是在第一个之后,它将仅成为单个阵列。


let A = [1,2,3,4]

const res= A.reduce((a,v,i)=> v % 2 == 0 ? [a[0],[...a[1],v]] : [[...a[0],v],a[1]],[[],[]])

console.log(res)

您可以在此处使用技巧。由于v % 2将返回1或者0所以你可以push()到和使用,返回原来的a不扩散运营商。


let A = [1,2,3,4]

const res= A.reduce((a,v,i)=> (a[v % 2].push(v),a),[[],[]])

console.log(res)


查看完整回答
反对 回复 2021-05-13
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

您可以使用解构分配来简化此操作-


const data =

  [ 1, 2, 3, 4 ]


const result =

  data.reduce

    ( ([ odd, even ], v) =>

        Boolean (v & 1)

          ? [ [...odd, v], even ]

          : [ odd, [...even, v] ]

    , [ [], [] ]

    )

    

console.log(result)

// [ [ 1, 3 ], [ 2, 4 ] ]

您可以创建一个通用函数,partition-


const partition = (p, a = []) =>

  a.reduce

    ( ([ t, f ], v) =>

        p (v)

          ? [ [...t, v], f ]

          : [ t, [...f, v] ]

    , [ [], [] ]

    )



const evenOdds =

  partition (v => Boolean (v & 1), [ 1, 2, 3, 4 ])


const lessThan2 =

  partition (v => v < 2, [ 1, 2, 3, 4 ])

    

console.log(evenOdds)

// [ [ 1, 3 ], [ 2, 4 ] ]


console.log(lessThan2)

// [ [ 1 ], [ 2, 3, 4 ] ]


查看完整回答
反对 回复 2021-05-13
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您也可以过滤两次:

  const res = [A.filter(it => it % 2), A.filter(it => !(it % 2))];


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

添加回答

举报

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