2016-12-21 3 views
0

を入力されていないループのためのは、ループのためのインデックスと値を取得するには、アレイ上の.entriesを使用して、私は問題を持っている

ranks: any = { 
    total: 100,  
    percentages: [ 
     { 
      percentage: 33 
     }, 
     { 
      percentage: 33 
     }, 
     { 
      percentage: 34 
     } 
    ] 
}; 

getMax(i: number){ 
    var max: number = 100; 
    for (let [index,value] of this.ranks.percentages.entries()) { 
     console.log(index, value.percentage); 
     if(index !== i){ 
      max -= value.percentage; 
     } 
    } 
    return max; 
} 

にコンソールログは、この場合には記録されません。私は何かをはっきりと見逃していなければならないので、簡単な例を作った。

array = [ 
    { name:12 }, 
    { name:23 }, 
    { name:34 } 
] 

for (let [index, value] of array.entries()) { 
    console.log(index, value.name); 
} 

私は普通の問題で取得する事をCONSOLE.LOGしようと思いますが、私はそれをスキップするので、私は、ブレークポイントを使用することができますどのようにログインするか、してはよく分かりません。

+1

あなたは関数 'this.ranks.percentages.entries()'として 'entries'を呼び出すように見えます。それらのカッコは省略してはいけませんか? – GolezTrol

+0

'try ... catch'の中に' for'ループを入れてみましたか?私はそれが適切な例外を投げるべきだと思います。 –

+0

括弧を使用しないと、例外がスローされます –

答えて

2

TSイテレータの

for (var _i = 0, _a = ranks.percentages.entries(); _i < _a.length; _i++) { 

length未定義であるとしてforステートメントをコンパイルするので、ループのためのオペレーションとなりません。

つまり、entries()が反復可能であることは分かりません。 entriesについてコンパイルエラーが発生していますか?

ES6にコンパイルすると、これが動作します。

コードを機能させたい場合は、それをループの基本として書き直してください。

+0

ちょうどこれをすべて学び、あなたが概説した正確な手順を実行しました。しばらくの間、コンパイルエラーを取得し始めました.wtf TS、基本forループに切り替えました。すべて動作しています –