繁体   English   中英

JavaScript:在工厂函数中使用内部原型方法从数组返回额定值

[英]JavaScript: Return Rating Value from Array Using Internal Prototype Method within Factory Function

我试图从工厂功能创建一个对象。 该对象包含一个内部原型,该原型由不同的方法组成。

我被困在从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()方法以获得所需的结果?

只需使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM