Перетасовать 4 массива со спаренными объектами, затем нажать на него

#javascript

#javascript

Вопрос:

У меня есть 4 массива, которые перетасовываются сами по себе, работают, как и ожидалось, пока все хорошо.

 let groupAB = shuffleArray(["A", "B",]); 
let groupCD = shuffleArray(["C", "D",]); 
let groupEF = shuffleArray(["E", "F",]); 
let groupHG = shuffleArray(["G", "H",]);
 

но теперь я хочу перетасовать групповые массивы и перенести их в новый существующий массив.

Я пытался сделать это так:

 let availablePositions = [];
let groupAB = shuffleArray(["A", "B",]); 
let groupCD = shuffleArray(["C", "D",]); 
let groupEF = shuffleArray(["E", "F",]); 
let groupHG = shuffleArray(["G", "H",]);
let availableGroups = shuffleArray([...groupAB, ...groupCD, ...groupEF, ...groupHG]);
    availablePositions.push(...availableGroups);
 

Что работает не так, как ожидалось. например: «A» и «B» разделяются и иногда оказываются на другой стороне спектра. Чтобы дать некоторую визуализацию, почему это нужно сделать; Я делаю карту для игры rts. От «А» до «Н» — это стартовая позиция для начала игры игрока. Но мне нужны пары людей для сценария 2v2v2v2. Так что A и B должны держаться вместе. Я очень плохо разбираюсь в JS, и это, вероятно, очевидная ошибка. Скрипт выполняется без ошибок.

Комментарии:

1. Проблема в том, что вам не нужны такие результаты: [A, G, H, B] ?

2. Да, точно. Мне нужно, чтобы A, B были вместе, но не всегда первые 2 в массиве.

Ответ №1:

Вы можете перемешивать по группам и сглаживать массив. Например, для:

Nodejs11:

 let availableGroups = shuffleArray([groupAB, groupCD, groupEF, groupHG]);
let availablePositions = availableGroups.flat();
 

Для более низких версий:

 let availableGroups = shuffleArray([groupAB, groupCD, groupEF, groupHG]);
availableGroups.forEach((v) => availablePositions.push(...v));