Набросал что-то, разбирайтесь, если хотите:
const array = ['a', 'b', 'c', 'd', 'e', '1', '2', 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'j'];
const getRandowPairs = arr => {
const sorted = [...new Set(arr)].sort((a, b) => Math.round(Math.random()) || -1);
let res = [];
for (let i = 0; i + 1 < sorted.length; i += 2){
res.push([sorted[i], sorted[i + 1]]);
}
return res;
};
const getRandomArr = arr => {
const index = Math.floor(Math.random() * arr.length);
const item = arr[index];
arr.splice(index, 1);
arr = arr.flatMap(e => e);
const set = new Set();
while (set.size < 5){
let i = Math.floor(Math.random() * arr.length);
if (!item.includes(arr[i])){
set.add(arr[i]);
}
}
return [item[1], ...set];
};
console.log(getRandomArr(getRandowPairs(array))); // [ "c", "e", "h", "a", "1", "2" ]
console.log(getRandomArr(getRandowPairs(array))); // [ "1", "a", "d", "f", "h", "c" ]
console.log(getRandomArr(getRandowPairs(array))); // [ "f", "b", "j", "g", "a", "2" ]
Судя по последнему комментарию автора, нужно так:
const array = ['a', 'b', 'c', 'd', 'e', '1', '2', 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'j'];
const getRandowPair = arr => {
const sorted = [...new Set(arr)].sort((a, b) => Math.round(Math.random()) || -1);
let res = [];
for (let i = 0; i + 1 < sorted.length; i += 2){
res.push([sorted[i], sorted[i + 1]]);
}
return res[Math.floor(Math.random() * res.length)];
};
const item = getRandowPair(array);
const set = new Set();
while (set.size < 5){
let i = Math.floor(Math.random() * array.length);
if (!item.includes(array[i])){
set.add(array[i]);
}
}
const result = [item[1], ...set];
console.log(result); // [ "e", "h", "c", "2", "j", "b" ]