使用JS原型确定星期几访问商店的人数最多

时间:2018-10-05 15:00:13

标签: javascript prototypejs

mostPopularDays函数确定一周中的哪一天访问宠物商店的人数最多。  如果将两天或更多天捆绑在一起以获取最大流量,则应返回一个包含这些天的数组。  如果输入为null或为空数组,则函数应返回null。  输入是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;}}

我编写了此函数,但它不起作用。我是Java语言新手。

1 个答案:

答案 0 :(得分:0)

首先,尝试使您的函数更通用,以便它可以在传入的任何天数数组中使用。解决此问题的一种方法是通过降序sort天数并返回第一个元素(或元素,如果有多天的流量相同)。

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也可以超越数组,这是不希望的)。您希望至少查看阵列中的所有日期,并以某种方式确定哪一个流量最多。