@beduin01

Как разбить массив из чисел на группы?

Есть массив из счисел в котором могут быть выколотые числа т.е. он не последовательный.
var arr = [1,2,4,6,8,14,17,18,19]
Нужно написать функцию которая бы разбивала его на произвольное количество групп с приблизительно равным количеством элементов т.е. к примеру:
2: [1,2,4,6,8], [14,17,18,19]
3: [1,2,4], [6,8,14], [17,18,19]
4: [1,2], [4,6], [8,14], [17,18,19]

и все в этом стиле. Нужно разбитие именно примерное т.е. не страшно куда отойдет число которое не влезает.

Проблема в том, что никак не могу записать алгоритм который бы не терял последний элемент на нечетной длине массива.
  • Вопрос задан
  • 544 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function split(arr, numParts) {
  const partSize = arr.length / numParts | 0;

  return Array
    .from({ length: numParts }, (n, i) => i * partSize)
    .map((n, i, a) => arr.slice(n, a[i + 1]));
}

UPD. В комментариях было высказано мнение, что неплохо бы размерам кусков отличаться не более, чем на единицу, т.е., скидывать все "лишние" элементы в последний кусок не надо. Окей, раскидаем сколько можно по одному элементу в разные куски:

function split(arr, numParts) {
  const partSize = arr.length / numParts | 0;
  const numLooseItems = arr.length % numParts;

  return Array.from(
    { length: numParts },
    function(_, i) {
      return arr.slice(this(i), this(i + 1));
    },
    i => i * partSize + Math.min(i, numLooseItems)
  );
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
21 нояб. 2024, в 22:21
3000 руб./в час
21 нояб. 2024, в 21:42
100000 руб./за проект
21 нояб. 2024, в 21:30
500 руб./за проект