2016-03-30 20 views
0
İade

Ben masaya veri sütununu ortalamasını için kullandıkları bir filtre vardır:Açısal Filtre Olağandışı Sonuçları

app.filter('avgByKey', function() { 
return function (data, key) { 
    if (typeof (data) === 'undefined' || typeof (key) === 'undefined') { 
     return 0; 
    } 
    var total = 0 
    for (var i = 0; i < data.length; i++) { 
     total += data[i][key]; 
    } 
    var avg = total/data.length; 
    avg = Math.round(avg); 
    return parseInt(avg); 
} 

})

yüzden benim HTML gibi kullanın:

Filtre, hücrelerden birinde verileri değiştirene kadar beklendiği gibi çalışır. Hücrelerden birinde bir sayı değiştirirsem, ortalama olarak "14578993057614092" gibi bir sayı döndürür. I sütun toplamını elde etmek için aynı tabloda kullanmak, hemen hemen aynı filtre vardır:

app.filter('sumByKey', function() { 
return function (data, key) { 
    if (typeof (data) === 'undefined' || typeof (key) === 'undefined') { 
     return 0; 
    } 

    var sum = 0; 
    for (var i = data.length - 1; i >= 0; i--) { 
     //sum += parseFloat(data[i][key]); 
     sum += Math.round((data[i][key]) * 100)/100; 
    } 
    if (sum < 1) { 
     return parseFloat(sum.toPrecision(2)); 

    } 
    else { 
     return sum; 

    } 
}; 

});

Hücrelerden birinde bir sayı değiştirdiğimde bile mükemmel çalışır. Hücre içindeki sayılardan birini ortalama filtreyle değiştirdikten sonra sayfayı yenilediğimde, filtre "doğru" cevabı gösterir, ancak bunu almak için sayfayı yenilemeliyim. Ortalama filtrenin neden bu davranışı sergilemediğini ve nasıl düzelteceğimi söyleyen var mı? Burada

ne gösteren bir Plunker olup: Example

+1

Senaryoyu daha iyi anlamak için bazı HTML kodu veya JsFiddle sağlayabilir misiniz? –

+0

Davranışı göstermek için bir Plunker ekledim. –

cevap

1

kullanımlar - toplam + = parseInt (veriler [i] [anahtar]); Bu sorunu çözecek.

+0

Çok teşekkürler! Bu yaptı. –

+0

Yardım etme zevkim! –

0

Girdiğiniz değerler dize değerleri olarak ayrıştırılıyor ve beklediğiniz şekilde eklenmiyor.

Bunun yerine böyle '3' + '5' + '7' = '357' Sen parseInt() kullanarak sayı olarak bunları ayrıştırmak gerekir

olarak numaralarının gerçekten uzun bir dize halinde birleştirilmiş ediliyor.