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

时间:2019-06-30 01:28:37

标签: javascript arrays function methods factory

我正在尝试从工厂函数创建对象。该对象包含一个内部原型,该原型由不同的方法组成。

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

1 个答案:

答案 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;
}