У меня есть следующий массив массивов:
[
[ '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
: Вернуть несколько массивов, используя функцию «карта»
Если кто-то знает способ для этого, или вам нужны дополнительные объяснения, дайте мне знать.
Благодарю вас!
Попробуйте этот подход
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)