#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));