#javascript
#javascript
Вопрос:
Я пытаюсь построить простой алгоритм для достижения наилучшей комбинации значений на основе двух параметров в array
оф objects
.
Весь черновик кода здесь
Сначала у меня есть array
хранилище objects
, элементы, которые будут проанализированы и упакованы в тома вместе. Все значения находятся внутри percentages
.
const nonStackableItems = [
{
id: 0,
m2: 15,
m3: 11,
weight: 20
},
{
id: 1,
m2: 25,
m3: 12,
weight: 42
},
{
id: 2,
m2: 50,
m3: 13,
weight: 40
},
{
id: 3,
m2: 65,
m3: 14,
weight: 25
}
];
Это фрагмент кода, который выполняет вычисления:
Идея состоит в том, чтобы объединить эти объекты в пакеты, соблюдая значение maximum
100%
для каждого значения (за исключением m3
этого случая, поскольку height
в этом первом анализе у всех пакетов должно быть достаточно).
Итак, подход, который я дал, просто недостаточно хорош, поскольку я сортирую это array
по m2
then by weight
, вызываю function
, а затем сравниваю длину обоих, а затем выбираю результат, который создает меньшие объемы.
function nSVolHelper(arr, vol, param1, param2) {
let newVol = {
id: vol.length,
m2: 0,
m3: 0,
weight: 0
};
for (let i = 0; i < arr.length; i ) {
const validation =
newVol[param1] arr[i][param1] < 100 amp;amp;
newVol.m2 arr[i][param2] < 100;
if (validation) {
newVol.m2 = arr[i].m2;
newVol.m3 = arr[i].m3;
newVol.weight = arr[i].weight;
}
if (!validation) {
return nSVolHelper(arr.slice(i), [...vol, newVol], param1, param2);
}
}
vol.push(newVol);
return vol;
}
function nSVol(arr, param1, param2) {
return nSVolHelper(arr, [], param1, param2);
}
Я хотел бы найти способ сделать это, не принимая за основу порядок array
, чтобы получить точное вычисление без запуска ненужного кода, без необходимости запускать код, упорядочивающий массивы по отдельности, а затем сравнивая их. Это не дает наилучшей комбинации.
В качестве примера для лучшего понимания:
Если я передам массив, отсортированный по weight
, я получу создать 2 тома.
console.log(
"call",
nSVol(
nonStackableItems.sort((a, b) => a.weight - b.weight),
"weight",
"m2"
)
Если я передам это же array
отсортированное по m2
, я получу 3 тома.
console.log(
"call",
nSVol(
nonStackableItems.sort((a, b) => a.m2 - b.m2),
"weight",
"m2"
)
Заранее большое спасибо.
Приветствия
Комментарии:
1. В частности, «Другой способ мышления …»?
2. Если код работает и вы ищете советы по его улучшению, Code Review — подходящее место. Но посмотрите codereview.meta.stackexchange.com/questions/5777 /… первый.
3. Мой вопрос касается необходимости решения, которое не достигается с помощью моего кода. Речь идет не просто о проверке, речь идет о фрагменте кода, который не выполняет то, что требуется. Вам не кажется, что это подходит для stackoverflow?
4. вероятно, проще использовать reduce tbh
5. Я думал
for
, что это более легкий метод @DenisTsoi. Я использовалreduce
в начале. Но это не в центре внимания вопроса здесь