2016-05-24 3 views
0

Das bin ich heute verlangsamt hat ....Angular2 Komponente Methode liefert NaN trotz type casting

Ich habe die folgende Methode in einer Komponente:

utility(prop:string):number { 
let ob:number; 
this.meals.map(something => { 
    something.items.map(item => { 
    ob += item.info[prop]; 
    console.log(prop, item.info[prop]); 
    }); 
});  
return ob; 
} 

Dies sind einige der Möglichkeiten, ich dies nennen Funktion:

<div class="label head">Total Fat 
<div id="totalFat" 
     class="weight total_fat_na"> 
     {{ fatStats().totalFat | number : "1.0-1"}}g 
</div> 
</div> 
<div id="totalFatP" 
    class="dv total_fat_na_p"> 
    {{ fatStats().totalFatDV | number : ".0-0" }}% 
</div> 
<div class="labellight">Saturated Fat 
<div id="totalSatFat" 
     class="weight saturated_fat_na"> 
     {{ fatStats().totalSatFat | number : ".0-0" }}g 
</div> 
</div> 
<div id="totalSatFat" 
    class="dv saturated_fat_na"> 
    {{ fatStats().totalSatFatDV | number : ".0-0" }}% 
</div> 
012:

fatStats(){ 
    let total_fat: number = 0; 
    let total_sat_fat: number = 0; 

    return { 
    totalFat: total_fat = this.utility('fat'), 
    totalFatDV: (total_fat/allowedFat) * 100, 
    totalSatFat: total_sat_fat = this.utility('satfat'), 
    totalSatFatDV: (total_sat_fat/allowedSatFat) * 100, 
    totalPolyFat: this.utility('polyfat'), 
    totalMonoFat: this.utility('monofat'), 
    totalTransFat: this.utility('transfat') 
    } 
} 

Die fatStats Methode aus meiner Sicht Vorlage aufgerufen wird

Die console.log zeigt korrekte Eigenschaften und Werte an, aber in allen Fällen ist die tatsächliche Ausgabe ein NaN, trotz verschiedener Versuche, eine Zahl aus dieser Dienstprogrammfunktion zu erzwingen, kann ich es nicht bekommen.

Irgendwelche Ideen würden geschätzt.

Steve

+1

Ein Plunker wäre wahrscheinlich hilfreich sein, zu untersuchen. –

+1

Sie haben recht, aber das wird Zeit brauchen - vielleicht morgen – Steve

+0

Ihr Quellobjekt würde helfen. Zur Verbesserung der Leistung sollten Sie die Ergebnisse auch in einer Variablen speichern und aus Ihrer Sicht zuordnen. – jornare

Antwort

0

OK dies eine Weile dauerte, aber manchmal muss man einfach zurück zu weniger sexy Code gehen ..

ersetzte ich die Interna der Nutzenfunktion und jetzt ist es genau das, was ich will, wenn die Änderungen anzeigen

utility(obj, prop:string){ 
let ob:number = 0; 
obj.forEach(function(my){ 
    my.items.forEach(function(item){ 
    ob += item.info[prop] * (item.portion/100); 
    }); 
}); 
return ob; 
} 

Dies gibt eine Nummer für alle Anfragen zurück. Keine nervigen NaN mehr.

Frieden

Steve