Задать вопрос
cannibal_corpse
@cannibal_corpse
Верстальщик руками

Как создать массив строк случайной длины из предложенных строк?

Есть массив со строками:

let arr = ['Яблоко', 'Груша', 'Апельсин', 'Слива',];

Надо создать несколько массивов случайной длины из массива arr.

Пример результата:

arr1 = ['Яблоко'];
arr2 = ['Яблоко', 'Груша', 'Апельсин'];
arr3 = ['Слива', 'Груша'];

Как это сделать?
  • Вопрос задан
  • 2450 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
Допускается ли повторение элементов?

Если да, то просто достаём случайные элементы из исходного массива:

const createArr = (source, maxLength = source.length) =>
  Array.from(
    { length: -~(Math.random() * maxLength) },
    () => source[Math.random() * source.length | 0]
  );

Если элементы не должны повторяться, тогда вырезаем случайные элементы из копии исходного массива:

const createArr = ([...source], maxLength = source.length) =>
  Array.from(
    { length: Math.min(source.length, -~(Math.random() * maxLength)) },
    () => source.splice(Math.random() * source.length | 0, 1)[0]
  );

Или, перемешиваем копию исходного массива и берём сколько надо элементов из начала:

function createArr([...source], maxLength = source.length) {
  for (let i = source.length; --i > 0;) {
    const j = Math.random() * -~i | 0;
    [ source[j], source[i] ] = [ source[i], source[j] ];
  }

  return source.slice(0, -~(Math.random() * maxLength));
}
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Генерируешь случайное число в промежутке от 1 до arr.length. Это длина будущего массива.

В цикле выбираешь случайные значения из arr, вносишь в новый массив.
Ответ написан
Комментировать
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Нужен генератор случайных чисел. в JS есть Math.random();

Далее, чтобы сгенерировать один массив пройдитесь по всему массиву строк и добавляйте текущую строку к ответу, если random() < kThreshold. kThreshold подбирайте исходя из того, какой длины вам нужны случайные массивы. В среднем в ответе будет kThreshold*array.length() элементов. Т.е. при kThreshold=0.5, в среднем сгенерированные массивы будут содержать по половине всех строк.

Минус этого метода, что чаще всего сгенерированные массивы будут средней длины. Массив из всех строчек или из одной единственной строчки будут маловероятны, но это может и не минус - зависит от того, зачем вам это надо.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы