Возврат нескольких массивов с помощью функции map - PullRequest
0 голосов
/ 15 января 2019

Мой код имеет массив элементов следующим образом:

element: { fromX: { id: ... } , toX: { id: ... } }

Требуется собрать все идентификаторы fromX в один массив, а все идентификаторы toX - в другой.

Есть несколько способов, например, используя foreach, reduce, итерацию для каждого соответственно, но я ищу оптимальный функциональный способ вернуть два массива с одним отображением?

Ответы [ 4 ]

0 голосов
/ 15 января 2019

Вы можете достичь этого, используя приведенное ниже решение

var array = [{ fromX: { id: 1 }, toX: { id: 2 } }, { fromX: { id: 3 }, toX: { id: 4 } }], 
 arrayX = array.map(x => x.fromX), arraytoX = array.map(toX => toX.toX)

console.log(arrayX);
console.log(arraytoX );
0 голосов
/ 15 января 2019

Попробуйте это:

const arr = [{
  fromX: {
    id: 1
  },
  toX: {
    id: 2
  }
}, {
  fromX: {
    id: 3
  },
  toX: {
    id: 4
  }
}]
let {
  arr1,
  arr2
} = arr.reduce((acc, {
  fromX,
  toX
}) => ({ ...acc,
  arr1: [...acc.arr1, fromX],
  arr2: [...acc.arr2, toX]
}), {
  arr1: [],
  arr2: []
})
console.log(arr1, arr2);
0 голосов
/ 15 января 2019

Использование Массив # уменьшить и Деструктуризация

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);
0 голосов
/ 15 января 2019

Вы можете взять массив для нужных ключей и отобразить значение. Позже возьмите деструктурирующее задание для получения одного 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...