3 回答

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)

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 ] ]
您可以創(chuàng)建一個通用函數,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 ] ]

TA貢獻1895條經驗 獲得超7個贊
您也可以過濾兩次:
const res = [A.filter(it => it % 2), A.filter(it => !(it % 2))];
添加回答
舉報