Случайным образом выберите 2 элемента из массива, где каждый элемент выбирается 4 раза и пары не дублируются.Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Случайным образом выберите 2 элемента из массива, где каждый элемент выбирается 4 раза и пары не дублируются.

Сообщение Anonymous »

Я хочу выбрать 2 элемента из массива и соединить их в пары. Каждый элемент должен быть выбран ровно 4 раза и каждая пара должна быть уникальной. Например, если у меня есть следующий массив:
arr = [p1, p2, p3, p7, p10, p15, p17, p19, p22, p27]
Я хочу сгенерировать что-то похожее на следующее:
результат: [[p2,p19],[p27,p10],[p15,p3],[p19,p17],[p27,p7],[p3,p17],[p27,p22],[p22,p3],[ п15,п1],[п7,п2],[п1 9,p1],[p17,p15],[p15,p27],[p3,p7],[p10,p22],[p17,p27],[p2,p3],[p27,p1],[p19, p22],[p2,p17]]
В том, что у меня «работает», я получаю уникальные пары, однако я не получаю ровно 4 экземпляра каждого элемента. Я получаю следующие экземпляры для каждого элемента:
p1 - 3, p2 - 4, p3 - 5, p7 - 3, p10 - 2, p15 - 4, p17 - 5, p19 - 4, p22 - 4, p27. - 6
Вот массив, который я использую:

Код: Выделить всё

let arr = [p1, p2, p3, p7, p10, p15, p17, p19, p22, p27];
Вот функция, которую я использую:

Код: Выделить всё

function selectUniquePairs(arr) {
if (arr.length < 2) {
return "Array must contain at least two elements.";
}

const selectedPairs = new Set();
const result = [];

for (let i = 0; i < arr.length * 2; i++) {
let index1, index2;
do {
index1 = Math.floor(Math.random() * arr.length);
index2 = Math.floor(Math.random() * arr.length);
} while (index1 === index2 || selectedPairs.has(JSON.stringify([index1, index2].sort())));

const pair = [arr[index1], arr[index2]];
result.push(pair);
selectedPairs.add(JSON.stringify([index1, index2].sort()));
}

return result;
}
Буду очень признателен за любую помощь.
Я хочу сделать это на чистом JavaScript, без дополнительных библиотек.>

Подробнее здесь: https://stackoverflow.com/questions/793 ... ed-4-times
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»