无法使数组减少工作:
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?
答案 0 :(得分:1)
不应该解析空输入并将其转换为0吗?
恰恰相反。 parseInt
将null
转换为NaN
(将其转换为字符串"null"
后)。除了字符串之外,你不应该使用parseInt
除其他任何内容!
如果您刚离开它,它甚至会起作用,因为添加null
的数字会导致它被强制转移到0
。但是,如果您想明确说明它,只需将samples.push(value)
语句放在if (value != null)
或if (typeof value == "number")
语句中。
答案 1 :(得分:0)
parseInt仍然返回NaN,而不是0.只需使用:
var value = values[ii] == null? 0 : parseInt(values[ii], 10);