我正在尝试从工厂函数创建对象。该对象包含一个内部原型,该原型由不同的方法组成。
我被困在getStars()方法返回的内容上。
内部原型:
const obj = {
addStars(rating){
return this.rating.push(rating)
},
getStars(?){
???
}
}
工厂功能:
function createRecipe (ingredients, cooktime, rating='') {
let instance = Object.create(obj)
instance.ingredients = ingredients;
instance.cooktime = cooktime;
instance.rating = [];
return instance
}
正在创建的对象:
const recipe1 = createRecipe(['cheese', 'dough', 'basil'], 20)
现在,我可以将其他人的starRatings添加到对象属性中的rating数组中。如下所示:
recipe1.addStars('*****');
recipe1.addStars('***');
recipe1.addStars('*');
我的问题是,我希望内部原型中的getStars方法采用添加到“评分”数组中的所有星级的平均值。
我希望看到的:
recipe1.getStars(); // returns 3
如何操作getStars()方法以获得所需的结果?
答案 0 :(得分:1)
只需使用reduce
对所有值求和,然后除以长度即可。
getStars() {
let allStars = this.ratings.reduce((a, { length: c }) => a + c, 0);
let avg = allStars / this.ratings.length;
return avg;
}
或单线:
getStars() {
return this.ratings.reduce((a, { length: c }) => a + c, 0) / this.ratings.length;
}