2017-09-06 93 views
0

無法獲得陣列減少工作:陣列減少和空值

var labels = ["MetricLinuxMemory","memCached","memTotalFree","MetricLinuxCPU","CpuRawSystem","memTotalSwap"]; 
var columns = [{values:[12,1,2,23,null,2]},{values:[12,null,2]},{values:[12,1,2]},{values:[12,1,2]},{values:[12,1,2]},{values:[12,1,2]}]; 

var data = {};  //Selected Performance data 

// Loop through labels 
for (var i = 0; i < labels.length; i++) { 

    var label = labels[i]; 

    //Search for calculated vlaue (Metric) 
    if(label.includes("Metric")){ 

     //Create property in data object 
     data[label] = {}; 

     var metric = data[label]; 
      metric.samples = []; 
      metric.sum = 1; 

     //Get appropriate column 
     var values = columns[i].values; 

     // Loop through values 
     for (var ii = 0; ii < values.length; ii++) {  

      //Convert to numeric 
      var value = parseInt(values[ii], 10); 

      //Push to data 
      metric.samples.push(value); 
      metric.sum = metric.samples.reduce(function(a, b) { return a + b; }, 0); 

     } 


    } 
} 

所需的輸出將是:

{ 
    "MetricLinuxMemory": { 
     "samples": [ 
      ... 
      23, 
      null, 
      ... 
     ], 
     "sum": 40 
    }, 
    ... 
} 

但是我似乎無法得到一個總和的工作。而是在MetricLinuxMemory中取得空值。不應該parseInt照顧null輸入並將其轉換爲0?

回答

0

parseInt函數仍然會返回NaN的,不是0只需使用:

var value = values[ii] == null? 0 : parseInt(values[ii], 10); 
1

不宜parseInt函數取零輸入的照顧,並將其轉換例如爲0?

恰恰相反。 parseIntnull轉換爲NaN(將其轉換爲字符串"null"後)。除了字符串之外,您不應該使用parseInt

如果你剛剛離開它,它甚至可以工作,因爲與null相加的數字會導致它被強制爲0。但是,如果您想明確說明,只需將samples.push(value)聲明放入if (value != null)if (typeof value == "number")聲明中即可。