Хранить значения из нескольких массивов в одном массиве (JavaScript / Reactjs) - PullRequest
0 голосов
/ 15 октября 2019

У меня есть массив, который имеет массивы в качестве значений. Что мне нужно, так это вывод со всеми значениями массива.

Примечание : входной массив и его элементы (массивы) не имеют фиксированной длины.

Входные данные :

array = 
[ 
  [a,b],
  [c,d,e],
  [f,g]
]

Выходные данные :

[
 {
  Header : a
  Children : 
  [
   {
    Header : c
    Children : 
     [
      Header : f
     ]
   },
  ]
 },
 {
  Header : a
  Children : 
  [
   {
    Header : c
    Children : 
     [
      Header : g
     ]
   },
  ]
 },
 {
  Header : a
  Children : 
  [
   {
    Header : d
    Children : 
     [
      Header : f
     ]
   },
  ]
 },
.
.
.
{
  Header : a
  Children : 
  [
   {
    Header : e
    Children : 
     [
      Header : g
     ]
   },
  ]
 },
 {
  Header : b
  Children : 
  [
   {
    Header : c
    Children : 
     [
      Header : f
     ]
   },
  ]
 },
 .
 .
 .
 .
 .
 {
  Header : b
  Children : 
  [
   {
    Header : e
    Children : 
     [
      Header : g
     ]
   },
  ]
 },
]

В основном это похоже на

[a,c,f],
[a,c,g],
[a,d,f],
[a,d,g],
[a,e,f],
[a,e,g],
[b,c,f],
[b,c,g],
[b,d,f],
[b,d,g],
[b,e,f],
[b,e,g]

Я пытался использовать дляцикл, но не смог получить желаемый результат. Есть ли способ, которым мы можем достичь этого результата?

Ответы [ 2 ]

0 голосов
/ 15 октября 2019
function join(arrayOfArrays) {
    let current = [[]];
    for (let array of arrayOfArrays) {
        current = current.flatMap(c=>array.map(a=>[...c, a]));
    }
    return current;
}
0 голосов
/ 15 октября 2019

Вы можете сначала создать декартово произведение массива 2D. Затем используйте reduceRight для создания вложенного объекта для каждого массива в декартовом произведении

const data = [
  ["a", "b"],
  ["c", "d", "e"],
  ["f", "g"]
]

const cartesian = data.reduce((acc, curr) =>
  acc.flatMap(c => curr.map(n => [].concat(c, n)))
)

const tree = arr => arr.reduceRight((acc, Header) =>
    acc ? ({ Header, Children: [acc] }) : ({ Header })
, null)

const output = cartesian.map(tree)

console.log(JSON.stringify(cartesian))
console.log(output)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...