@itwaze
Web Developer

Как разбить массив объектов на массив массивов по условию?

У меня есть массив объектов, мне нужно разделить этот массив на несколько массивов. Если сумма элементов <= 500, вернуть эти объекты в массив и продолжить дальше считать считать сумму элементов по такому же условию.

const array = [{idx: 1, count: 100}, {idx: 2, count: 200}, {idx: 3, count: 200}, {idx: 4, count: 100}]

// Ожидаемый результат: массив массивов
// [[{idx: 1, count: 100}, {idx: 2, count: 200}, {idx: 3, count: 200}], [{idx: 4, count: 100}]]
  • Вопрос задан
  • 1152 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const groupBySum = (arr, key, max) => arr
  .reduce((acc, n, i) => (
    (!i || acc[acc.length - 1][1] + n[key] > max) && acc.push([ [], 0 ]),
    acc[acc.length - 1][0].push(n),
    acc[acc.length - 1][1] += n[key],
    acc
  ), [])
  .map(n => n[0]);


const result = groupBySum(arr, 'count', 500);
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
let results = [];
let count = 0;
let index = 0;

array.forEach((obj) => {
  if (count + obj.count <= 500) {
    count += obj.count;
  } else {
    count = obj.count;
    index++;
  }

  if (!results[index]) {
    results.push([]);
  }

  results[index].push(obj);
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы