我试图从变量avengers中得到属性“markAv”的平均值。
avengers = []
function Avenger(fullName, classRoom, city, job, studies, markAv) {
this.fullName = fullName;
this.classRoom = classRoom;
this.city = city;
this.job = job;
this.studies = studies;
this.markAv = markAv;
avengers.push(arguments)
}
Avenger({
fullName: "Hulk Paul",
classRoom: "V",
city: "Miami",
job: "Cientist",
studies: "Harvard",
markAv: 8
})
Avenger({
fullName: "Tony Stark",
classRoom: "XI",
city: "NYC",
job: "Ingeneer",
studies: "MIT",
markAv: 10
})
Avenger({
fullName: "Diana Princess",
classRoom: "III",
city: "NYC",
job: "Warrior",
studies: "Atenas",
markAv: 11
})
Avenger({
fullName: "Thais Jacob",
classRoom: "IV",
city: "Málaga",
job: "IT",
studies: "Brazil",
markAv: 5
})
为了得到它,我插入了函数“getAverage”。但是,它返回“NaN”。我想知道原因和如何解决它的解释,因为我不明白为什么。
let getAverage = arr => {
let reducer = (total, currentValue) => total + currentValue;
let sum = arr.reduce(reducer)
return sum / arr.length;
}
let average = avengers.map(markAv => avengers.markAv);
console.log(getAverage(average));
5条答案
按热度按时间4nkexdtk1#
您的代码中有几个问题:
1.您将创建传递给Avenger函数的参数数组,而不是为每个对象创建Avenger函数构造函数的示例。
1.您正在向Avenger函数传递一个对象,而不是单个参数。
1.您正在尝试访问avengers数组的
markAv
属性,而不是正在Map的当前对象。要解决这些问题,您可以执行以下操作:
1.使用new关键字并传递所需参数,为每个对象创建Avenger函数的示例。
1.将各个参数传递给Avenger函数,而不是对象。
1.使用Map到的当前对象(本例中为obj)访问其属性,而不是avengers数组。
下面是更新后的工作代码:
zy1mlcev2#
更改
let average = avengers.map(markAv => markAv.markAv);
,同时请替换avengers.push(arguments[0])
i5desfxk3#
看起来您正在尝试使用function constructor,因此您应该使用
new
关键字,并将这些新对象示例添加到数组中。然后在reducer中将所有
markAv
值相加,然后除以数组的长度。js4nwp544#
oipij1gg5#