2016-12-31 8 views
0

だから私はこの配列を持っている:削減多次元オブジェクトを含む配列ではない整数

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は整数だけを処理しますか?

オブジェクトを「途中で」整数にマップしている限り、オブジェクトを処理できると思っていました。何が一体。あなたは徐々にサイクル値を累積してヒットしたいターゲットを想定

答えて

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 

あなたは名手になりたい場合は、また、のような1行に減らす凝縮可能性これは:

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