2017-09-06 7 views
0

との和を減らす:Array配列が仕事に減らす取得できませんnull値

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 
    }, 
    ... 
} 

は、しかし、私は1つの合計が仕事を得るように見えることはできません。代わりにMetricLinuxMemoryでnullを取得してください。 parseIntはnull入力を処理し、例えば0に変換するべきではありませんか?

答えて

0

のparseIntはまだはNaNを返し、0ではなくただ使用:

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

のparseIntはNULL入力の世話をし、0に例のためにそれを変換するべきではないでしょうか。

それどころか、 parseIntnull"null"に変換した後にNaNに変換します。文字列以外はparseIntを使用しないでください。 nullの数字を追加すると、0に強制されるので、それを残してしまえば、機能したこともあります。しかし、明示したいのであれば、samples.push(value)ステートメントをif (value != null)またはif (typeof value == "number")ステートメントに入れてください。

関連する問題