Сформировать n число уникальных массивов

Нужно получить n число массивов, в данном случае 2 (users = 2), в каждом должно быть по 4 рандомных и уникальных значения. Вот мой вариант решения. Как можно сократить, улучшить или какой еще есть ваш вариант решения? Спасибо

const arrText = ['Alfa Romeo', 'De Tomaso', 'Iran Khodro', 'Land Rover', 'Mercedes Benz', 'Rolls Royce', 'Ssang Yong', 'Chang Feng', 'Los Angeles', 'New York', 'Kansas City', 'Virginia Beach']
let users = ['1', '2']

function shuffle(arr) {
  let result = []
  let userArr = []
  for (let i = 0; i < users.length * 4; i++) {
    let random = Math.floor(Math.random() * (arr.length - i)) + i
    let newArr = arr[random]
    arr[random] = arr[i]
    userArr.push((arr[i] = newArr))
  }
  for (let j = 0; j < users.length; j++) {
    result[j] = userArr.slice(j * 4, j * 4 + 4)
  }
  console.log(result)
}
shuffle(arrText)


Ответы (2 шт):

Автор решения: Jour

Если я вас правильно понял, можно так)

const users = [1, 2]
let arrText = ['Alfa Romeo', 'De Tomaso', 'Iran Khodro', 'Land Rover', 'Mercedes Benz', 'Rolls Royce', 'Ssang Yong', 'Chang Feng', 'Los Angeles', 'New York', 'Kansas City', 'Virginia Beach']

const result = users.map(user => {
  let arr = []
  for (let i = 0; i < 4; i++) {
    const rand = Math.floor(Math.random() * arrText.length)
    arr.push(arrText[rand])
    arrText.splice(rand, 1)
  }
  return arr
})
console.log(result)

→ Ссылка
Автор решения: Артём

Я использовал Тасование Фишера — Йетса для тасования элементов массива, а также функцию .splice для замены массива users последними 4-мя удалёнными элементами.

const array = [
  'Alfa Romeo', 'De Tomaso', 'Iran Khodro', 'Land Rover',
  'Mercedes Benz', 'Rolls Royce', 'Ssang Yong', 'Chang Feng',
  'Los Angeles', 'New York', 'Kansas City', 'Virginia Beach'
];

const users = [ '1', '2' ];

function shuffle(array, users, size = 4) {
  for (let i = array.length - 1; i > 0; i--) {
    let j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  };

  return users.map(() => array.splice(-1 * size, size));
};

console.log(shuffle(array, users));

→ Ссылка