繁体   English   中英

数组归零总和为空值

[英]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?

反之。 parseIntnull转换为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM