[英]Array reduce sum with null values
无法使数组减少工作:
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中获取null。 parseInt是否应该处理空输入并将其转换为例如0?
parseInt是否应该处理空输入并将其转换为例如0?
反之。 parseInt
将null
转换为NaN
(在将其转换为字符串"null"
)。 除了字符串,您不应该在其他任何东西上使用parseInt
!
如果您只是略去了它,它甚至可以工作,因为加上null
的数字会使它强制为0
。 但是,如果要明确说明,只需将samples.push(value)
语句放在if (value != null)
或if (typeof value == "number")
语句中。
parseInt仍返回NaN,而不是0。只需使用:
var value = values[ii] == null? 0 : parseInt(values[ii], 10);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.