Равномерно распределить логические значения по массиву (Javascript)

У меня есть логический массив фиксированной длины. Значения по умолчанию равны false.
Мне нужно заполнить массив N значениями true, которые в основном равномерно распределены по массиву.

Например: если длина равна 7, а N равно 3, это будет выглядеть примерно так:
[false, true, false, true, false, true, false]

Если длина равна 14, а N равно 5, это будет выглядеть примерно так:
[false, false, true, false, false, true, false, false, true, false, true, false, true, false]

Дело в том, что нет строгого правила, как его распределять, а только то, что оно должно распространяться в основном ровным слоем (возможно, с правилом, что первый и последний элементы не будут верно, но не обязательно).


person amitairos    schedule 04.08.2020    source источник
comment
Что-то вроде этого? jsfiddle.net/ykvg0bna   -  person Chris G    schedule 04.08.2020
comment
@Berto99 Javasript, но в основном мне нужна идея   -  person amitairos    schedule 04.08.2020
comment
@ChrisG Да! Не могли бы вы объяснить, что вы там делали?   -  person amitairos    schedule 04.08.2020
comment
Я начинаю с массива вроде [0, 1, 2, 3, 4], затем умножаю каждое число на подходящий коэффициент, чтобы распределить числа по [0–11], и округляю его, чтобы получить целые числа. Затем я использую полученные индексы, чтобы установить для этих элементов массива значение true.   -  person Chris G    schedule 04.08.2020
comment
Итак, что вы пробовали до сих пор? Я бы просто установил для каждого индекса i*length/N th значение true.   -  person MrSmith42    schedule 04.08.2020


Ответы (1)


В итоге сделал это (аналогично тому, что предложил @ChrisG):

function createBoolArray(len, trues) {
  const arr = new Array(len).fill(false);
  new Array(trues).fill(0).map((_, i) => 
  Math.floor((i+1) * (len-1) / trues))
 .forEach(e => arr[e] = true);

  return arr;
}

console.log(createBoolArray(14, 5))
person amitairos    schedule 05.08.2020