需要有关Javascript原型函数的帮助

时间:2018-02-11 07:44:32

标签: javascript arrays function prototypejs

function Weekday (name, traffic) {
this.name = name;
this.traffic = traffic;
}

function mostPopularDays(week) { 
week = [];
week.push(this.name, this.traffic);
if(week.length > 1){
    return week;
}else if(week.length === null || week === []){
    return null;
}else {
    return week[0];
}
}

var mon = new Weekday("Monday", 200);
mostPopularDays(mon);

/ **  *确定一周中哪一天有最多的人访问  * 宠物店。如果一周中超过一天具有相同的,最高的量  *流量,应返回包含日期(以任何顺序)的数组。  *(例如[“星期三”,“星期四”])。如果输入为null或空数组,则为该函数  *应该返回null。  * @param周是一组Weekday对象  * @return一个字符串,其中包含一周中最受欢迎的一天的名称(如果只有一个最受欢迎的一天),以及包含最受欢迎日期名称的字符串数组(如果有多个最受欢迎的日期)  * /

我已经认真学习Javascript超过2周了然后我在EDx学习了这门课程,显然,仍然无法解决这类问题。上面的代码是我自己的代码,我知道它的错误(除了工作日功能)。很高兴能得到帮助。谢谢

3 个答案:

答案 0 :(得分:0)

mostPopularDays函数实际上从未使用提供的参数,因为它在第一行被替换。

function mostPopularDays(week) { 
week = [];

然后有一个不合时宜的this,函数mostPopularDaysWeekDay没有任何关系,所以你所指的this实际上是mostPopularDays函数本身,而不是您提供的WeekDay

根据我对描述赋值的文字的理解,mostPopularDays应该有多个参数,以便过滤掉最受欢迎的参数(" @param周工作日对象数组&# 34。)

所以,你的TODO列表如下:

  • 将参数重命名为mostPopularDays,以表示输入为WeekDay的数组(我使用weeks(+ s)或weekList)< / LI>
  • 无需在mostPopularDays内将任何内容推送到数组中。
  • this内的mostPopularDays没有用,您希望引用所提供的WeekDay个对象
  • 中的项目

到目前为止,我还不知道您的课程遍及阵列的方式,有几种:

  • for (var i = 0; i < weekList.length; ++i) { ... }
  • weekList.forEach(function(week) { ... })
  • (如果您已经涵盖了数组的减少和排序,您可能需要查看这些,因为这将是我的首选)。

答案 1 :(得分:0)

对于测试,您应该创建对象(天)和对象数组。

然后对对象进行排序并检查是否应该返回一天以上。

如果有超过一天的最高流量,我也提出了一个完整答案的条件。

var mon = new Weekday('Monday', 5);
var tue = new Weekday('Tuesday', 3);
var wed = new Weekday('Wednesday',8);
var thu = new Weekday('Thursday', 5);
var fri = new Weekday('Friday', 14);
var sat = new Weekday('Saturday', 14 );
var sun = new Weekday('Sunday', 0);

var weekDays = [mon, tue, wed, thu, fri, sat, sun];

function mostPopularDays(week) {
    week.sort(compare);
    var mostPopularDay = [];
    var mostPopularDayValue = week[0].traffic;

    week.forEach(day => {
        if(day.traffic == mostPopularDayValue){
            mostPopularDay.push(day.name);
        }
    });

    if(mostPopularDay.length>1){
        console.log('The most popular days are: '+ mostPopularDay);
    } else{
        console.log('The most popular day is '+ mostPopularDay);
    }    
}
function compare(a,b) {
    if (a.traffic < b.traffic)
      return 1;
    if (a.traffic > b.traffic)
      return -1;
    return 0;
  }
function Weekday (name, traffic) {
    this.name = name;
    this.traffic = traffic;
}
mostPopularDays(weekDays);

答案 2 :(得分:0)

这很容易,您可以很快理解。

function mostPopularDays(week) {
    if(week.length === 0){
        return null;
    }
    var maxArray = [];
    var max = '';
    for(i=0; i < week.length; i++){
        if(week[i].traffic === max){
            maxArray.push(week[i].name);
        }else if(week[i].traffic > max){
            maxArray = [];
            maxArray.push(week[i].name);
            max = week[i].traffic;
        };
    }
    if(maxArray.length === 1){
        return maxArray[0];
    } else {
        return maxArray;
    }
}