首页 > 解决方案 > 从 JSON 数组中获取平均值

问题描述

我似乎无法从我的可变输出中获得平均值。要么我得到 NaN 要么为零。

我的第一个输出是:

console.log(data)
0: {nodeId: "53", SNR: "[38.2, 38, 37.9, 37.8, 37.6]", timestamp: 
"2019-09-05 00:00:17"}

然后我解析它以仅获取 SNR:

console.log(SNR);
["[38.2, 38, 37.9, 37.8, 37.6]"]

我尝试了下面的代码;但它一直给我 0 并且似乎看不到方括号内的数字:

      0[38.2, 38, 37.9, 37.8, 37.6]
$(document).ready(function() {
    $.ajax({
        url: "http://localhost:8080/data.php",
        type: "GET",
        success: function(data) {
            console.log(data);
            var SNR = [];
            for (var i in data) {
                SNR.push(data[i].SNR);
            }
            console.log(SNR);
            //const numbers = [80, 77, 88, 95, 68];
            const numbers = [SNR];
            //const grades = [SNR];
            //function getAvg(grades) {
            //const sum = 0;
            const sum = numbers.reduce((total, n) => total + n, 0);
            console.log(sum);
            //const total = grades.reduce((acc, c) => acc + c, 0);
            //return total / grades.length;

            // const average = getAvg(grades);
            //console.log(average);

        },

        error: function(data) {

        }
    });
});

输入数据:

[{"nodeId":"53","SNR":"[38.2, 38, 37.9, 37.8, 37.6]","timestamp":"2019-09-05 00:00:17"},{"nodeId":"53","SNR":"[38.2, 37.9, 38.4, 37.9, 38.3]","timestamp":"2019-09-05 00:15:17"}]

预期输出(已解析 SNR):

0: 37.9
1: 38.1

标签: javascriptarraysjson

解决方案


如果您的数据确实如您所描述的那样,那么问题就很明显了:SNR是一个 JSON-ish 字符串描述了一个数组,而不是一个实际的数组。

为了对您的代码进行微创更改,

SNR.push(JSON.parse(data[i].SNR));

可能是一个好的开始。


推荐阅读