数组使用空值减少总和

时间:2017-09-06 00:39:51

标签: javascript arrays

无法使数组减少工作:

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?

2 个答案:

答案 0 :(得分:1)

  

不应该解析空输入并将其转换为0吗?

恰恰相反。 parseIntnull转换为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);