javascript - 从 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
解决方案
如果您的数据确实如您所描述的那样,那么问题就很明显了:SNR
是一个 JSON-ish 字符串描述了一个数组,而不是一个实际的数组。
为了对您的代码进行微创更改,
SNR.push(JSON.parse(data[i].SNR));
可能是一个好的开始。
推荐阅读
- javascript - nodejs递归调用栈报错,但是代码应该没问题
- css - django 模板迭代列表:如何为每个项目创建唯一的叠加弹出窗口?
- asp.net - 运行所选代码生成器时出错:'值 -1 超出 [0,2147483647] 的可接受范围。参数名称:值'
- c# - C#没有线程?
- java - 下面使用 (? extends aClass) 的代码让我感到困惑
- python-3.x - 如何将字符串列表转换为集合列表?
- python - 熊猫,Python中“Jul 07, 2019”的日期解析代码
- rust - 使用 STM32f1xx_hal crate 时借用移动值错误
- windows - 只有在管理员组中才能模拟没有密码的用户
- spring-boot - 在 spring-boot-starter-data-elasticsearch 中建议查询不起作用