const createArr = (source, maxLength) =>
[...Array(1 + Math.random() * maxLength | 0)].map(() => source[Math.random() * source.length | 0]);
const [ arr1, arr2, arr3 ] = [...Array(3)].map(() => createArr(arr, 5));
Если элементы не должны повторяться, тогда так (исходный массив копируется и из него вырезаются случайные элементы):
const createArr = ([...source], maxLength) => Array.from(
{ length: Math.min(source.length, 1 + Math.random() * maxLength | 0) },
() => source.splice(Math.random() * source.length | 0, 1)[0]
);
или, копируем исходный массив, перемешиваем копию, берём случайное количество элементов из начала:
function createArr(source, maxLength) {
const arr = source.slice();
for (let i = arr.length; --i > 0;) {
const j = Math.random() * (i + 1) | 0;
[ arr[j], arr[i] ] = [ arr[i], arr[j] ];
}
return arr.slice(0, 1 + Math.random() * maxLength | 0);
}