Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我总是得到错误s没有定义?_Javascript_Json - Fatal编程技术网

Javascript 为什么我总是得到错误s没有定义?

Javascript 为什么我总是得到错误s没有定义?,javascript,json,Javascript,Json,我正在做一个家庭作业,它总是返回同样的错误。问题就在这里 编写一个名为“json_average”的函数,该函数将json格式的字符串作为对象数组格式的参数,其中每个对象都有键“质量”、“密度”、“温度”和“速度”,每个键映射到一个浮点数。此函数应以JSON字符串的形式返回数组中所有对象的平均“速度”,格式为{“速度”:} 我试着用let s=0和var=0来切换,但不管怎样,它仍然不起作用。这是我试过的代码 function json_average(x) { let data = J

我正在做一个家庭作业,它总是返回同样的错误。问题就在这里 编写一个名为“json_average”的函数,该函数将json格式的字符串作为对象数组格式的参数,其中每个对象都有键“质量”、“密度”、“温度”和“速度”,每个键映射到一个浮点数。此函数应以JSON字符串的形式返回数组中所有对象的平均“速度”,格式为{“速度”:}

我试着用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

您试图在未初始化时使用s。更新了功能,希望对大家有所帮助

函数json_平均值(x){
让data=JSON.parse(x);
var s=0;
var n=0;
对于(让我来看看数据){
设a=i[“速度”];
s=s+a;
n=n+1;
}
设d={“速度”:(s/n)};
return(JSON.stringify(d));

}
您试图在未初始化s时使用s。更新了功能,希望对大家有所帮助

函数json_平均值(x){
让data=JSON.parse(x);
var s=0;
var n=0;
对于(让我来看看数据){
设a=i[“速度”];
s=s+a;
n=n+1;
}
设d={“速度”:(s/n)};
return(JSON.stringify(d));

}
您正在重新定义循环中已声明的变量,使其具有块作用域(在循环中)。在块内用let声明的变量在块范围外不可访问。另外,如果你想在te循环中给s和这些其他变量块作用域,你将无法在计算速度的循环外得到它的值。见js小提琴

函数json_平均值(x){
让data=JSON.parse(x);
var s=0;
var n=0;
对于(数据中的i){
a=数据[i][“速度”];
s=s+a;
n=n+1;
}
设d={“速度”:(s/n)};
return(JSON.stringify(d));
}
var结果=json_平均值(“[{“质量”:3.55,“密度”:380.72,“速度”:33.11,“温度”:46.8},{“质量”:91.37,“密度”:572.04,“速度”:64.43,“温度”:-0.13},{“质量”:40.4,“密度”:124.52,“速度”:52.8,“温度”:38.81},{“质量”:68.92,“密度”:326.77,“速度”:31.64,“温度”:43.71},{“质量”:3.22,“密度”:419.85,“速度”:70.64,“温度”:23.58}];

console.log(result);
您正在重新定义循环中已声明的变量,使其具有块作用域(在循环中).在块内使用let声明的变量在块作用域外不可访问。此外,如果要在te循环中为s和这些其他变量指定块作用域,则无法在循环外获取其值以计算速度。请参阅js FIDLE

函数json_平均值(x){
让data=JSON.parse(x);
var s=0;
var n=0;
对于(数据中的i){
a=数据[i][“速度”];
s=s+a;
n=n+1;
}
设d={“速度”:(s/n)};
return(JSON.stringify(d));
}
var结果=json_平均值(“[{“质量”:3.55,“密度”:380.72,“速度”:33.11,“温度”:46.8},{“质量”:91.37,“密度”:572.04,“速度”:64.43,“温度”:-0.13},{“质量”:40.4,“密度”:124.52,“速度”:52.8,“温度”:38.81},{“质量”:68.92,“密度”:326.77,“速度”:31.64,“温度”:43.71},{“质量”:3.22,”密度:419.85,“速度”:70.64,“温度”:23.58}];

console.log(结果)
让s=s+1;
引入了一个新的未初始化变量
s
,您尝试将其添加到其中。请阅读
var
let
实际做的事情。在循环之前,您已经使用var声明了s和n变量。在for循环块内部,您再次使用let声明了for循环块,它只能在for循环块内部访问。您需要了解Javascript中的作用域。
let s=s+1;
引入了一个新的未初始化变量
s
,您尝试将其添加到其中。请阅读
var
let
实际做的事情。您已经在循环之前使用var声明了s和n变量。对于循环块内部,您再次使用let声明,这是可以访问的仅在for循环块中。您需要了解Javascript中的作用域。