Проблема при попытке вычислить среднее значение с помощью метода javascript

#javascript

#javascript

Вопрос:

Я пытаюсь вычислить среднее значение из массива объектов, по какой-то причине я получаю следующую ошибку:

 [Vue warn]: Error in render: "TypeError: discountReviews[i] is undefined"
  

Я использую простой for в своем методе для вычисления среднего:

 getAverage: function(discount){


        let discountReviews = discount.discountreviews;

        if(discountReviews.length == 0){
            return 5;
        }
        else{
            let total = 0;
            console.log(discountReviews.length);
            for(var i=0; i<= discountReviews.length; i  ){
                total = parseInt(total)   parseInt( discountReviews[i].rating);
            }

            let average = Math.ceil(total / discountReviews.length);

            return average;

        }

    },
  

Мой массив discountreviews выглядит следующим образом:

введите описание изображения здесь

Комментарии:

1. <= -> < поскольку массивы в javascript основаны на 0

Ответ №1:

 for(var i=0; i<= discountReviews.length; i  ){
    total = parseInt(total)   parseInt( discountReviews[i].rating);
}
  

Javascript использует счетчик на основе 0. Итак, если длина discountReviews равна 1, будет вычислен последний тираж discountReviews[1] , который не определен. Поэтому измените код на

 for(var i=0; i < discountReviews.length; i  ){
    total = parseInt(total)   parseInt( discountReviews[i].rating);
}
  

Ответ №2:

Измените свой for loop :

 for(var i=0; i < discountReviews.length; i  ){
  

i не может быть равно длине массива, массив выйдет за пределы.

Ответ №3:

Массивы представляют собой индекс, основанный на нуле.

  i <= discountReviews.length
    ^
  

Удалите символ равенства

  i < discountReviews.length
  

Ответ №4:

Ваш цикл for будет повторяться на один раз больше, чем необходимо, и получит доступ к индексу nth 1, который будет неопределенным.

попробуйте изменить его на

 for(var i=0; i < discountReviews.length; i  ){
  total = parseInt(total)   parseInt( discountReviews[i].rating);
}