2015-07-12 59 views
0

我得到了NaNInfinity以獲取我的JSON數組對象的最大值。未從JSON數組中獲取正確的值

我想追加從其他JSON的GeoJSOn數據的屬性。 以下是JSFiddle供參考。

的片段:

$.map(data, function (e) { 
    var dev_id = e.dev_id; 
    var data = e.data; 
    for (var j = 0; j < data.length; j++) { 
     var rainVal = parseFloat(data[j].rain_value); 
     arr[j] = parseFloat(rainVal); 
    } 
    var max = Math.max.apply(Math, arr) * 4; 
    console.log(dev_id + " " + max) 
    for (var k = 0; k < len; k++) { 
     jsonObj_device_id = jsonObj.features[k].properties["device_id"]; 
     if (jsonObj_device_id === dev_id) { 
      var nameR = "rain_intensity"; 
      var rainValue = max; 
      jsonObj.features[k].properties[nameR] = rainValue; 
     } 
    } 
}); 

回答

1

存在這樣的情況在你的代碼,其中在Ajax響應,你要麼沒有得到數據,即e.data或者如果你得到你沒有得到rain_value數據。如果您第一次沒有獲得e.data,您將在控制檯上獲得Infinity登錄,因爲var max = Math.max.apply(Math, [])結果爲-Infinity。如果你沒有得到rain_value那麼parseFloat會給你NaN

在這些操作之前驗證API響應。像這樣的東西。

var dev_id = e.dev_id; 
    var data = e.data; 
    var max = 0, r; 
    var arr = []; 
    if(data) { 
     for (var j = 0; j < data.length; j++) { 
      r = data[j].rain_value || 0; 
      arr[j] = parseFloat(r); 
     } 
    } 
    if(arr.length) { 
     max = Math.max.apply(Math, arr) * 4; 
    } 

    console.log(dev_id + " " + max); 
+0

如果這是我想它的'max'值設爲'0'的情況。需要設置一些條件,但是如何? –

+0

你應該自己試一試。已添加一些示例代碼。 –

+0

數字!就是這樣,我得到的數據並不一致。感謝您的解釋! –

0

這裏是一個working demo

var rainVal = parseFloat(data[j].rain_value); 
if (!rainVal) // check 1 
    rainVal = 0; 
arr[j] = parseFloat(rainVal); 
} 
var max = 0; 
if (arr) // check 2 
{ 
    maxBeforeTested = Math.max.apply(Math, arr) * 4; 
    if (isFinite(maxBeforeTested)) //check 3 
     max = maxBeforeTested; 
    else 
     console.log("Had an infinite value here."); 
} 
console.log("Cleaned output: " + dev_id + " " + max) 

基本上,你需要一些檢查,我已經加入評論爲 「檢查」。

  1. 大於1.797693134862315E+308的任何數字都是無窮大。使用isFinite()進行檢查。
  2. NaN不是指一個數值,您可以檢查使用isNaN()或者乾脆if()