Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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在构造函数中使用数组_Javascript_Arrays_Constructor - Fatal编程技术网

使用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;ilog(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());