使用Javascript在构造函数中使用数组
我一直在试图找到一种方法,将数组正确定义为构造函数值之一。假设我们有一个学生,我们需要一个包含他的成绩的数组,然后使用这个数组我们需要从学生的成绩中得到一个平均值。遗憾的是,我只发现一些线程在其他编程语言中解决了这个问题。这就是我认为有效的方法:使用Javascript在构造函数中使用数组,javascript,arrays,constructor,Javascript,Arrays,Constructor,我一直在试图找到一种方法,将数组正确定义为构造函数值之一。假设我们有一个学生,我们需要一个包含他的成绩的数组,然后使用这个数组我们需要从学生的成绩中得到一个平均值。遗憾的是,我只发现一些线程在其他编程语言中解决了这个问题。这就是我认为有效的方法: function student(name, surname, number, grades) { this.name = name; this.surname = surname; this.number = number; this.grades
function student(name, surname, number, grades) {
this.name = name;
this.surname = surname;
this.number = number;
this.grades = [];
this.average = function(grades) {
var sum = 0;
for(var i = 0; i < grades.length; i++) {
sum + = grades[i];}
var average = sum / grades.length;
return average;
}
}
不幸的是,它将我的成绩数组显示为空白,我看不出我的平均值函数是否正常工作。我应该更改哪些部分,以便在grades数组中实际有一些值
谢谢。你把几件事搞砸了。如果要将grades数组作为参数传入,则需要使用以下内容设置等级:
this.grades = grades;
此外,在平均值函数中,您需要使用this.grades
来引用等级,而不仅仅是等级。这将允许您在以后添加更多分数,并且仍然可以获得正确的平均值。您还可以考虑通过定义构造函数来选择等级,例如:
function student(name, surname, number, grades =[])
然后,如果您不传入值,一个空数组将等待您
最后,您可能会遇到以下情况:
function student(name, surname, number, grades =[])
函数学生(姓名、姓氏、编号、年级=[]){
this.name=名称;
this.姓氏=姓氏;
这个数字=数字;
这个。等级=等级;
this.average=函数(){
返回this.grades.reduce((a,c)=>a+c,0)/this.grades.length
}
}
var student1=新生(“彼得”,“猫”,14444,[2,3,4]);
log(“Average:,student1.Average())
//添加另一个等级:
学生1.成绩。推(6)
console.log(“New Average:,student1.Average())
您已经将成绩
传递到student()
函数中,因此不需要将其传递到student.Average
函数中(因为内部函数已经可以访问外部函数参数)。因此,您也不需要设置this.grades=[]
另外,sum+=grades[i]
应该是sum+=grades[i]
简单地修复此错误,然后省略将等级
传递到内部函数将正确显示平均值,如下所示:
功能学生(姓名、姓氏、编号、年级){
this.name=名称;
this.姓氏=姓氏;
这个数字=数字;
this.average=函数(){
var总和=0;
对于(变量i=0;i log(student1.average())代码>变量的初始化是空数组
this.grades = [];
应该是
this.grades = grades;
但是,我建议您学习一些javascript ES6/ECMAScript 2015并使用类。
您可以通过使用ES6解决相同的问题,在您的代码中,您正在初始化this.grade=[]
,函数中有一个空数组,因此平均值的进一步处理将仅在空数组上完成。为了获得良好的实践,函数参数应该指定一个默认值,这样,如果我们错误地没有将数组作为参数传递,那么函数参数将使用默认值。在ES6中附加代码片段以便于理解
class std{
constructor(name, surname, number, grades = []) {
this.name = name;
this.surname = surname;
this.number = number;
this.grades = grades;
}
average() {
if(this.grades.length !== 0){
return this.grades.reduce((previous, current) => previous + current, 0) /
this.grades.length
} else { return "no grades mentioned"; }
}
}
var student1 = new std("Peter", "Cat", 14444, [1, 3, 4]);
console.log("Average: ", student1.average());
//add new student
var student2 = new std("Prasanna", "sasne", 14444);
console.log(student2);
//student2.grades.push(7)
//console.log("New Average: ", student2.average() )
您可以使用以下行:
函数学生(姓名、姓氏、编号、年级){}
与此相反:
函数学生(姓名、姓氏、编号、年级=[]){}
功能学生(姓名、姓氏、编号、年级){
this.name=名称;
this.姓氏=姓氏;
这个数字=数字;
这个。等级=等级;
this.average=函数(){
返回this.grades.reduce((a,c)=>a+c,0)/this.grades.length
}
}
var student1=新生(“彼得”,“猫”,14444,[2,3,4]);
log(“Average:,student1.Average())
//添加另一个等级:
学生1.成绩。推(6)
console.log(“新平均值:”,student1.Average())
我们可以使用Object方法存储平均值:
function Student(name, surname, number, grades = [])
{
this.name = name;
this.surname = surname;
this.number = number;
this.grades = grades;
//Method to calculate the Average
this.average = function()
{
if(this.grades.length !==0)
{
//Return the Average Calculation
return this.grades.reduce((previous, current) => previous + current, 0) / this.grades.length
}
else
{
//This will return if grades not provided
return "No Grades Mentioned"
}
}
}
//With Grades
var student1 = new Student("Srinivasan", "Raja", 1635, [22,43,67,89,90]);
console.log(student1, "Average: "+ student1.average());
//Without Grades
var student1 = new Student("Denny", "Lawrence", 1635);
console.log(student1, "Average: "+ student1.average());
this.grades=[]代码>不应该是this.grades=grades
?
function Student(name, surname, number, grades = [])
{
this.name = name;
this.surname = surname;
this.number = number;
this.grades = grades;
//Method to calculate the Average
this.average = function()
{
if(this.grades.length !==0)
{
//Return the Average Calculation
return this.grades.reduce((previous, current) => previous + current, 0) / this.grades.length
}
else
{
//This will return if grades not provided
return "No Grades Mentioned"
}
}
}
//With Grades
var student1 = new Student("Srinivasan", "Raja", 1635, [22,43,67,89,90]);
console.log(student1, "Average: "+ student1.average());
//Without Grades
var student1 = new Student("Denny", "Lawrence", 1635);
console.log(student1, "Average: "+ student1.average());