gpt4 book ai didi

javascript - 有没有更好的方法来编写这样的函数

转载 作者:行者123 更新时间:2023-11-28 03:28:09 26 4
gpt4 key购买 nike

下面的函数接受两个参数并返回一个对象数组。每个对象应引用 availableBagSizes 数组按降序返回。我举了两个例子,我想知道是否有更好的解决方案来实现相同的输出以及为什么我的解决方案不好。

我需要有关第三个示例的帮助,它没有按预期返回。

function getBagCounts(clientOrders, availableBagSizes) {
// TODO: remove this hard-coded solution for test scenario
// clientOrders === [9]

// sorting the availablebag size in descending order
const newAvailableBag = availableBagSizes.sort((a, b) => b - a);

const result = [];
let newRemainder;

for (let index = 0; index < clientOrders.length; index++) {
const clientOrder = clientOrders[index];

// set the newremainder variable to clientOrder for the first loop
newRemainder = index === 0 ? clientOrder : newRemainder;

for (let j = 0; j < availableBagSizes.length; j++) {
const bagSize = newAvailableBag[j];

const count_result = Math.floor(newRemainder / bagSize);
newRemainder = newRemainder % bagSize;
const obj = {};

if (newRemainder > bagSize) {
result.push({ size: bagSize, count: 0 });
continue;
}

// checking if it is the last item in the bagSizes
if (j + 1 === availableBagSizes.length) {
// setting the newreaminder to the next number of client order
newRemainder = clientOrders[index + 1];
}

result.push({ size: bagSize, count: count_result });
}
}
return result;
}

// first example
const clientOrders = [9];
const availableBagSizes = [1, 2, 4];
const expectedoutput = [
{ size: 4, count: 2 },
{ size: 2, count: 0 },
{ size: 1, count: 1 }
];

// second example
const clientOrders = [5, 12, 12];
const availableBagSizes = [1, 2, 4];
const expectedoutput = [
{ size: 4, count: 1 },
{ size: 2, count: 0 },
{ size: 1, count: 1 },
{ size: 4, count: 3 },
{ size: 2, count: 0 },
{ size: 1, count: 0 },
{ size: 4, count: 2 },
{ size: 2, count: 1 },
{ size: 1, count: 0 }
];

// third example
const clientOrders = [4.5];
const availableBagSizes = [1, 2, 4];
const expectedoutput = [
{ size: 4, count: 1 },
{ size: 2, count: 0 },
{ size: 1, count: 0.5 }
];

最佳答案

我觉得不错。

如果你想要一个好的代码,你应该考虑性能和参数检查。

if (!Array.isArray(clientOrders) || !Array.isArray(availableBagSizes)) {
return null;
}

您还应该尝试使用 forEarch loop which is faster in performance

进行 push 很慢,最好进行 .map((element,index)=>{return null})

这实际上取决于您如何管理数据,但我想说第一个循环是 forEach,第二个循环是您制作 map。因为无论第二个循环中的情况如何,每次进行 push 时,映射数组中都不会有 nullundefined 返回。

关于javascript - 有没有更好的方法来编写这样的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58440000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com