在while循环中使用Reduce

时间:2017-04-27 03:34:45

标签: javascript arrays

之前我发布了这个问题,但发布了一个非常混乱的版本(我的道歉) - 我正在试图找出更新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 ];
}

0 个答案:

没有答案