之前我发布了这个问题,但发布了一个非常混乱的版本(我的道歉) - 我正在试图找出更新accumulator
函数内assignOrders
的结束值的最佳方法,所以当它再次运行时,该值(理想情况下)小于第一次运行时的值。
函数fulfillAll
接受一个对象数组和一个整数作为参数。该数组将具有如下所示的对象:
{ name: 'bob', min: 0, max: 30 },
{ name: 'ella', min: 0, max: 40 }
如果计数不等于任何对象的最大值,则会增加计数。否则,它会在fulfilled
上创建一个属性并继续。
当前发生的是它根据需要运行并更新对象数组,但由于每次reduce
运行时累加器都不会更新,因此会错误计算分配给每个对象的数量(因为太多,大部分时间)。
提前谢谢你。这是代码:
const assignOrders = (arr, x) => {
var fulfilled = {};
let accumulator = arr.reduce((acc, curr) => {
if (curr.count < curr.max) {
curr.count += 1;
return acc--;
} else if (curr.count === curr.max && !fulfilled[curr.name]) {
fulfilled[curr.name] = true;
return acc;
}
return acc;
}, x);
return [ accumulator, (Object.keys(fulfilled).length === arr.length) ];
}
const fulfillAll = (arr, orders) => {
var accumulator = orders,
fulfilled = false;
while (accumulator !== 0 && !fulfilled) {
[ accumulator, fulfilled ] = assignOrders(arr, accumulator);
console.log(accumulator, fulfilled);
}
return [ arr, accumulator ];
}