无法让数组缩减工作:
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 不应该处理 null 输入并将其转换为 0 吗?
最佳答案
Shouldn't parseInt take care of the null input and convert it for example to 0?
恰恰相反。 parseInt
将 null
转换为 NaN
(在将其转换为字符串 "null"
之后)。除了字符串之外,您不应该在任何其他内容上使用 parseInt
!
如果您只是将其省略,它甚至会起作用,因为添加一个带有 null
的数字会导致它被强制为 0
。但是,如果您想明确说明这一点,只需将 samples.push(value)
语句放入 if (value != null)
或 if ( typeof value == "number")
语句。
关于javascript - 数组减少空值之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46065138/