Определяет, в какой день недели наибольшее количество людей посетили магазин с прототипом JS - PullRequest
0 голосов
/ 05 октября 2018

Функция MostPopularDays определяет, в какой день недели наибольшее количество людей посещало зоомагазин.Если два или более дня связаны для наибольшего объема трафика, должен быть возвращен массив, содержащий дни.Если входное значение равно нулю или пустой массив, функция должна вернуть ноль.Входными данными является массив объектов Weekday.Эта функция должна возвращать строку, содержащую название самого популярного дня недели, если существует только один самый популярный день, и массив, содержащий названия самых популярных дней, если их больше одного, которые наиболее популярны.

function Weekday (name, traffic) {
   this.name = name;
   this.traffic = traffic;}                                             
function mostPopularDays(week) {
   var sat = new Weekday('Saturday', 33);
   var sun = new Weekday('Sunday', 23);
   var mon = new Weekday('Monday', 8);
   var tue = new Weekday('Tuesday', 15);
   var wed = new Weekday('Wednesday', 5);
   var thu = new Weekday('Thursday', 18);
   var fri = new Weekday('Friday', 29);
   week = [sat , sun , mon , tue , wed , thu , fri];
   for (var i = 0 ; i <= length-1 ; i++){
      if(week[i].traffic > week[i+1].traffic)
         return week[i].name;}}

Я пишу эту функцию, и она не работает.Я новичок в Javascript.

1 Ответ

0 голосов
/ 05 октября 2018

Во-первых, попытайтесь сделать вашу функцию более общей, чтобы она работала с любым переданным массивом дней. Один из способов решить эту проблему - отсортировать дней по убыванию и вернуть первый элемент(или элементы, если есть несколько дней с одним и тем же самым высоким трафиком).

var sat = new Weekday('Saturday', 33);
var sun = new Weekday('Sunday', 23);
var mon = new Weekday('Monday', 8);
var tue = new Weekday('Tuesday', 33);
var wed = new Weekday('Wednesday', 5);
var thu = new Weekday('Thursday', 18);
var fri = new Weekday('Friday', 29);
var week = [sat , sun , mon , tue , wed , thu , fri];

function mostPopularDays(week) {   
   week.sort((a, b) => b.traffic - a.traffic); // sort by descending order
   return week
           .filter(day => day.traffic === week[0].traffic)
           .map(day => day.name);
}

console.log(mostPopularDays(week)); // [Saturday, Tuesday]

Что касается вашей попытки, некоторые проблемы с вашим циклом for:

  • length не определено (вы, вероятно, имели в виду week.length)
  • Вы немедленно вернетесь, если обнаружите, что день с индексом i имеет больше трафика, чем день с следующим индексом.Подумайте о правильности этого подхода (i также может выходить за рамки массива, что нежелательно).Вы хотите хотя бы посмотреть на все дни в массиве и каким-то образом определить, какой из них имеет больше всего трафика.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...