使用“map”函数返回多个数组

Zor*_*kan 6 javascript reduce functional-programming ecmascript-6

我的代码有一个元素数组,如下所示:

element: { fromX: { id: ... } , toX: { id: ... } }
Run Code Online (Sandbox Code Playgroud)

要求是将所有fromXid 放入一个数组中,并将所有toXid 放入另一个数组中。

有几种不同的方法,例如分别使用foreachreduce、 迭代,但我正在寻找一种最佳的功能方法来通过一个映射返回两个数组?

kem*_*ica 11

使用Array#reduce解构

const data=[{fromX:{id:1},toX:{id:2}},{fromX:{id:3},toX:{id:4}},{fromX:{id:5},toX:{id:6}},{fromX:{id:7},toX:{id:8}}]

const [fromX,toX] = data.reduce(([a,b], {fromX,toX})=>{
  a.push(fromX.id);
  b.push(toX.id);
  return [a,b];
}, [[],[]]);

console.log(fromX);
console.log(toX);
Run Code Online (Sandbox Code Playgroud)


Nin*_*olz 2

您可以为所需的键获取一个数组并映射该值。稍后接受解构作业以获得单身id

const
    transpose = array => array.reduce((r, a) => a.map((v, i) => [...(r[i] || []), v]), []),
    array = [{ fromX: { id: 1 }, toX: { id: 2 } }, { fromX: { id: 3 }, toX: { id: 4 } }],
    keys = ['fromX', 'toX'],
    [fromX, toX] = transpose(array.map(o => keys.map(k => o[k].id)));

console.log(fromX);
console.log(toX);
Run Code Online (Sandbox Code Playgroud)