为什么我不断收到错误s未定义?

时间:2019-11-05 03:37:15

标签: javascript json

我正在处理家庭作业问题,并且一直返回相同的错误。这是问题所在 编写一个名为“ 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

2 个答案:

答案 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);