2016-07-29 84 views
1

我有一個計算json對象並返回平均結果的問題。循環槽json對象並返回彙總結果

這是我的JSON對象

var testJson = [{ 
       "1": "0.038728952407837", 
       "2": "0.034420967102051", 
       "3": "0.034113883972168", 
       "4": "0.033237934112549", 
       "5": "0.033545017242432", 
       "6": "0.033923149108887", 
       "7": "0.033990859985352", 
       "8": "0.033454895019531", 
       "9": "0.033518075942993", 
       "10": "0.033759117126465", 
       "11": "0.033965826034546", 
       "12": "0.03358006477356", 
       "13": "0.033926010131836", 
       "14": "0.033300876617432", 
       "15": "0.033140897750854", 
       "16": "0.033447027206421", 
       "17": "0.033830165863037", 
       "18": "0.033417940139771", 
       "19": "0.033578157424927", 
       "20": "0.032893180847168", 
      }] 

這是我的代碼

var arr = testJson[0]; 
var total = 0; 
for (var i = 0; i < arr.length; i++) { //loop through the array 
    total += arr[i]; //Do the math! 
} 
console.log(total) 

而這一結果的輸出只連接字符串

0.0387289524078370.0344209671020510.0341138839721680.0332379341125490.0335450172424320.0339231491088870.0339908599853520.0334548950195310.0335180759429930.0337591171264650.0339658260345460.033580064773560.0339260101318360.0333008766174320.0331408977508540.0334470272064210.0338301658630370.0334179401397710.0335781574249270.0328931808471680.0339531898498540.0339729785919190.0338070392608640.0332689285278320.0333919525146480.033372879028320.0353031158447270.0355949401855470.0359919071197510.036854982376099 

所以,我在哪裏失敗?

回答

2

您需要將類型解析爲浮點型。由於json中的所有變量都是字符串。所以當你使用添加功能時,它就像字符串連接一樣工作。所以在添加之前解析爲float。像 total + = parseFloat(arr [i]);
​​

+0

返回結果是0 –

+1

你可以創建一個小提琴這??? – Manikandan

+0

https://jsfiddle.net/valor_/f36tvdre/1/ –

1

使用parseFloat。

var arr = testJson[0]; 
var total = 0; 
for (var i = 0; i < arr.length; i++) { //loop through the array 
    **total += parseFloat(arr[i]); //Do the math!** 
} 
console.log(total) 
+0

或者使用編號功能。總數+ =數字(arr [i]); – Sheetal

+1

或者僅僅是'total + = + arr [i]'。 – nicael

+0

我不知道爲什麼,但結果是0 –

3

這是一個類型轉換問題。您在testJson上的值是字符串。和string1 + string2連接這兩個字符串併產生新的字符串。您應該使用parseFloat函數將此值解析爲Float。

if(!Object.values){Object.values=obj=>Object.keys(obj).map(key=>obj[key])} 

var arr = Object.values(testJson[0]); 
var total = 0; 
for (var i = 0; i < arr.length; i++) { //loop through the array 
    total += parseFloat(arr[i]); //Do the math! 
} 
console.log(total) 

第二種選擇;

if(!Object.values)Object.values=obj=>Object.keys(obj).map(key=>parseFloat(obj[key])) 
var total = 0; 
Object.values(testJson[0]).forEach(function(val){total += val}); 

的代碼線I所使用的,

if(!Object.values)Object.values=obj=>Object.keys(obj).map(key=>parseFloat(obj[key])) 

填充工具

來自維基百科; 在Web開發中,polyfill是一種代碼,它實現了不支持該功能的網頁瀏覽器上的 功能。大多數情況下,它指的是一個JavaScript庫,它實現了HTML5 Web標準,在舊瀏覽器上實現了 建立標準(由某些瀏覽器支持), 或現有 瀏覽器中建議的標準(不受任何瀏覽器支持)。形式上,「一個polyfill是一個瀏覽器API的基礎」[1]。

+0

我不知道爲什麼,但結果是0 –

+0

https://jsfiddle.net/valor_/f36tvdre/ 1/ –

+0

我明白了,問題在於我們試圖獲取對象的長度。它返回undefined。您可以使用forEach方法遍歷您的對象,或將此對象轉換爲值數組。 _更新代碼根據that_ –

1
var key, total = 0; 
var testJson = [{ 
      "1": "0.038728952407837", 
      "2": "0.034420967102051", 
      "3": "0.034113883972168", 
      "4": "0.033237934112549", 
      "5": "0.033545017242432", 
      "6": "0.033923149108887", 
      "7": "0.033990859985352", 
      "8": "0.033454895019531", 
      "9": "0.033518075942993", 
      "10": "0.033759117126465", 
      "11": "0.033965826034546", 
      "12": "0.03358006477356", 
      "13": "0.033926010131836", 
      "14": "0.033300876617432", 
      "15": "0.033140897750854", 
      "16": "0.033447027206421", 
      "17": "0.033830165863037", 
      "18": "0.033417940139771", 
      "19": "0.033578157424927", 
      "20": "0.032893180847168", 
     }] 
(testJson || []).forEach(function(obj){ 
    for(key in obj){ 
     total += parseFloat(obj[key], 10); 
    } 
});