减少包含非整数对象的多维数组

时间:2016-12-31 05:08:59

标签: javascript arrays node.js reduce

所以我有这个数组:

  levels: [
            {
                level: 3, cycles: 5
            },
            {
                level: 4, cycles: 7
            },
            {
                level: 2, cycles: 3
            },
            {
                level: 1, cycles: 2
            }
        ]

最终希望我想做的是迭代数组并累积周期值,直到我得到一个匹配。

所以我有这段代码:

    var priority = 1;  //default priority is 1

    cycleNumber = ind % queue._priority.totalPriorityCycles;

    queue._priority.levels.reduce(function (a, b) {

        const lower = a.cycles;
        const upper = a.cycles + b.cycles;
        console.log('lower => ', lower);
        console.log('upper => ', upper);

        if (cycleNumber <= upper) {
            priority = b.level;  // i need a reference to b.level too!
        }
        return upper;
    });

我得到了这个记录的输出:

lower =>  7
upper =>  12
lower =>  undefined
upper =>  NaN
lower =>  undefined
upper =>  NaN

可以减少不处理对象吗?我很困惑为什么它无法解决这个问题。有没有我做错了,或Array.prototype.reduce只处理整数?

我认为只要我将对象映射到一个整数&#34;就可以处理对象&#34;。到底是什么。

1 个答案:

答案 0 :(得分:1)

假设您希望通过逐步累积周期值来达到的目标是15,您可以这样做:

const target = 15;

const totalCycles = levels.reduce(function(total, level) {
  if (total < target) {
    return total + level.cycles;
  } else {
    return total;
  }
}, 0);

console.log(totalCycles); // => 15

如果你想成为一个热点,你也可以将缩小浓缩成一行如下:

const totalCycles = levels.reduce((total, level) => (total < target) ? total + level.cycles : total, 0);