Мне нужно раскидать элементы по многомерному массиву с учетом их высоты, чтобы в конечном итоге общая "высота" каждого массива была близка к "высоте" остальных массивов. Но перерисовывать массивы не нужно, нужно просто последовательное раскидать объекты по массивом с учетом высоты.
Получается многомерный массив с 3 массивами и есть 100 объектов которые необходимо раскидать по этим массивам последовательно, у каждого из объектов прописана высота ({height: Number})
Есть цикл который последовательно перебирает массив объектов и пушит объекты по индексу массива у котором сумма высот объектов меньше остальных.
Вот неудачная попутка осуществить задуманное
const data = [
{ height: 10 },
{ height: 20 },
{ height: 30 },
{ height: 20 },
{ height: 40 },
{ height: 60 },
{ height: 10 },
{ height: 30 },
{ height: 70 },
{ height: 50 },
{ height: 110 },
{ height: 90 }
]
const columnHeight = Array.from({ length: 3 }, () => 0)
const columns = Array.from({ length: 3 }, () => [])
data.map((e, i) => {
const { height } = e
const indexMin = columnHeight.indexOf(Math.min.apply(null, columnHeight))
columnHeight[indexMin] = columnHeight[indexMin] + height
columns[indexMin].push(e)
})
При это вывод следующий
//console.log(columns)
[
[{ height: 10 }, { height: 20 }, { height: 60 }, { height: 110 }],
[{ height: 20 }, { height: 40 }, { height: 70 }],
[{ height: 30 }, { height: 10 }, { height: 30 }, { height: 50 }, { height: 90 }]
]
А должен быть
[
[{ height: 10 }, { height: 20 }, { height: 10 }, { height: 30 }, { height: 70 },], // 140
[{ height: 20 }, { height: 60 }, { height: 110 },], // 190
[{ height: 30 }, { height: 40 }, { height: 50 }, { height: 90 }] // 210
]