我想按奇偶元素将数组拆分,这是我的代码
A.reduce((a,v,i)=> v % 2 == 0 ? [...a[0],v] : [...a[1],v],[[],[]])
A
是数字数组。我不明白为什么会出现错误:
a[1]不可迭代?
考虑到这段代码能够正常运行:
let arr = [[],[]];
console.log([...arr[1], 4]);
我想按奇偶元素将数组拆分,这是我的代码
A.reduce((a,v,i)=> v % 2 == 0 ? [...a[0],v] : [...a[1],v],[[],[]])
A
是数字数组。我不明白为什么会出现错误:
a[1]不可迭代?
考虑到这段代码能够正常运行:
let arr = [[],[]];
console.log([...arr[1], 4]);
reduce()
中仅返回单个数组。您还需要返回第二个数组。
在第一次迭代中,a
是[[],[]]
。但在第一次迭代之后,它将变成单个数组。
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
而不需要使用spread操作符。
let A = [1,2,3,4]
const res= A.reduce((a,v,i)=> (a[v % 2].push(v),a),[[],[]])
console.log(res)
你也可以进行两次过滤:
const res = [A.filter(it => it % 2), A.filter(it => !(it % 2))];
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 ] ]
A.forEach(x=> B[x%2].push(x) )
let A=[1,2,3,4,5,6,7], B=[ [],[] ];
A.forEach(x=> B[x%2].push(x) );
console.log(B);
A
数组长什么样? - Vasil Dininskia[0]
或a[1]
就已经被扩展到结果数组中,因此累加器不再是一个二维数组。 - Pointy