Добавить еще один уровень вложенных массивов в массив массивов с исходными данными JavaScript

У меня есть следующий массив массивов:

    [
      [ '3b5ec76c-a501-4edf-b97c-2526d6d3e147', '1 & 2' ],
      [ '1f7a07f4-45aa-4a35-ad42-d3f187ee804a', '3 & 4' ],
      [ 'c8a4eead-79ee-4d4b-a16d-68723798d338', '5 & 6' ]
    ]

Я должен split the second item каждого вложенного массива и create two new arrays с ними и first item of a nested array вот так:

    [
       [
          [ '3b5ec76c-a501-4edf-b97c-2526d6d3e147', '1' ],
          [ '3b5ec76c-a501-4edf-b97c-2526d6d3e147', '2' ]
       ],
       [
          [ '1f7a07f4-45aa-4a35-ad42-d3f187ee804a', '3' ],
          [ '1f7a07f4-45aa-4a35-ad42-d3f187ee804a', '4' ]
       ],
       [
          [ 'c8a4eead-79ee-4d4b-a16d-68723798d338', '5' ],
          [ 'c8a4eead-79ee-4d4b-a16d-68723798d338', '6' ]
       ]
    ]

Мне нужен такой nested array, потому что я использую его для bulk insert in nodeJS.

Мой current method, который я использую для создания этого массива, выглядит так:

    console.info(teams.map(team => {
            let initialArray = []
            let firstPlayer = [uuidv4(), team[0], team[1].split(' & ')[0]]
            let secondPlayer = [uuidv4(), team[0], team[1].split(' & ')[1]] 
    
            data = (initialArray.concat(firstPlayer)).concat(secondPlayer)
    
            return data
        }))

А отклик такой:

    [
      [
        'da4d27fb-06e3-4075-aaba-be799d793bbd',
        '3b5ec76c-a501-4edf-b97c-2526d6d3e147',
        '1',
        'df869f69-76fb-41bc-af59-f86c1c623cfb',
        '3b5ec76c-a501-4edf-b97c-2526d6d3e147',
        '2'
      ],
      [
        'fb7c5620-6f20-4586-a82a-30c0ea39022e',
        '1f7a07f4-45aa-4a35-ad42-d3f187ee804a',
        '3',
        '1d30d9d7-3d63-4309-a7d3-5bc6abe17500',
        '1f7a07f4-45aa-4a35-ad42-d3f187ee804a',
        '4'
      ],
      [
        '433159a1-ee21-4f91-ae6e-69fb359b747b',
        'c8a4eead-79ee-4d4b-a16d-68723798d338',
        '5',
        '8321a976-9bae-408d-810b-f5508012d58e',
        'c8a4eead-79ee-4d4b-a16d-68723798d338',
        '6'
      ]
    ]

Я также попробовал метод с использованием reduce, найденный в этом stackoverflow question: Вернуть несколько массивов, используя функцию «карта»

Если кто-то знает способ для этого, или вам нужны дополнительные объяснения, дайте мне знать.

Благодарю вас!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
46
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуйте этот подход

const data = [[ '3b5ec76c-a501-4edf-b97c-2526d6d3e147', '1 & 2' ],[ '1f7a07f4-45aa-4a35-ad42-d3f187ee804a', '3 & 4' ],[ 'c8a4eead-79ee-4d4b-a16d-68723798d338', '5 & 6' ]];

const result = data.map(([guid, teams]) => {
    const [team1, team2] = teams.split(' & ');
    return [[guid, team1], [guid, team2]];
});

console.info(result);
.as-console-wrapper{min-height: 100%!important; top: 0}

Тот же результат, но с одним вкладышем

const data = [[ '3b5ec76c-a501-4edf-b97c-2526d6d3e147', '1 & 2' ],[ '1f7a07f4-45aa-4a35-ad42-d3f187ee804a', '3 & 4' ],[ 'c8a4eead-79ee-4d4b-a16d-68723798d338', '5 & 6' ]];

const result = data.map(([guid, teams]) => teams.split(' & ').map((team) => [guid, team]));

console.info(result);
.as-console-wrapper{min-height: 100%!important; top: 0}

Это также сработает.

Использование Массив.прототип.уменьшить()

const input = [
  [ '3b5ec76c-a501-4edf-b97c-2526d6d3e147', '1 & 2' ],
  [ '1f7a07f4-45aa-4a35-ad42-d3f187ee804a', '3 & 4' ],
  [ 'c8a4eead-79ee-4d4b-a16d-68723798d338', '5 & 6' ]
]

const output = input.reduce((prev, [uuid, combinedValue]) => {
  const [first,second] = combinedValue.split(" & ");
  prev.push([[uuid, first], [uuid, second]]);
  return prev;
},[])

console.info(output);

Вам просто нужно 3 строки кода

const source = [
  ["3b5ec76c-a501-4edf-b97c-2526d6d3e147", "1 & 2"],
  ["1f7a07f4-45aa-4a35-ad42-d3f187ee804a", "3 & 4"],
  ["c8a4eead-79ee-4d4b-a16d-68723798d338", "5 & 6"],
];

const destination = source.map(team => {
    const options = team[1].split('&'); 
    newSubDestinationArray = options.map(item => ["your uuid id", team[0], item]); 
    return newSubDestinationArray;
})


console.info(destination)

Другие вопросы по теме