我正在处理家庭作业问题,并且一直返回相同的错误。这是问题所在 编写一个名为“ json_average”的函数,该函数以对象数组的格式采用JSON格式的字符串作为参数,其中每个对象都有键“质量”,“密度”,“温度”和“速度”,并且每个键都映射到浮点数。此函数应以JSON字符串的形式返回数组中所有对象的平均“速度”,格式为{“ velocity”:}
我尝试切换一些方法,例如使用let s = 0和var = 0,但两种方法仍然无法正常工作。这是我尝试的代码。
function json_average(x) {
let data = JSON.parse(x);
var s = 0 ;
var n = 0;
var a;
for (let i of data) {
a = i["velocity"];
s = s + a ;
n = n + 1 ;
}
let d = {"velocity" : (s/n)};
return(JSON.stringify(d));
}
当我提交代码时,它就是返回的内容。
`error on input ['[{"mass": 3.55, "density": 380.72, "velocity": 33.11, "temperature": 46.8}, {"mass": 91.37, "density": 572.04, "velocity": 64.43, "temperature": -0.13}, {"mass": 40.4, "density": 124.52, "velocity": 52.8, "temperature": 38.81}, {"mass": 68.92, "density": 326.77, "velocity": 31.64, "temperature": 43.71}, {"mass": 3.22, "density": 419.85, "velocity": 70.64, "temperature": 23.58}]']:`
ReferenceError: s is not defined
答案 0 :(得分:2)
您尝试在未初始化时使用。更新了功能,希望对您有所帮助。
function json_average(x) {
let data = JSON.parse(x);
var s = 0 ;
var n = 0;
for (let i of data) {
let a = i["velocity"];
s = s + a ;
n = n + 1 ;
}
let d = {"velocity" : (s/n)};
return(JSON.stringify(d));
}
答案 1 :(得分:1)
您正在循环内重新定义已声明的变量以具有块作用域(循环内)。在块内部用let声明的变量在块范围之外不可访问。同样,如果要给s以及其他变量在te循环中限制作用域,则将无法在循环之外获取其值以计算速度。参见js小提琴。
function json_average(x) {
let data = JSON.parse(x);
var s = 0 ;
var n = 0;
for (i in data) {
a = data[i]["velocity"];
s = s + a ;
n = n + 1 ;
}
let d = {"velocity" : (s/n)};
return(JSON.stringify(d));
}
var result = json_average('[{"mass": 3.55, "density": 380.72, "velocity": 33.11, "temperature": 46.8}, {"mass": 91.37, "density": 572.04, "velocity": 64.43, "temperature": -0.13}, {"mass": 40.4, "density": 124.52, "velocity": 52.8, "temperature": 38.81}, {"mass": 68.92, "density": 326.77, "velocity": 31.64, "temperature": 43.71}, {"mass": 3.22, "density": 419.85, "velocity": 70.64, "temperature": 23.58}]');
console.log(result);