【问题标题】:Need help on Javascript prototype functions需要有关 Javascript 原型函数的帮助
【发布时间】:2018-07-21 14:48:26
【问题描述】:
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 week 一个工作日对象数组 * @return 如果只有一个最受欢迎的日子,则返回一个包含一周中最受欢迎的日子的名称的字符串,如果有多个最受欢迎的日子,则返回一个包含最受欢迎的日子名称的字符串数组 */

我已经认真学习 Javascript 两个多星期了,然后我在 EDx 上这门课程,显然,仍然无法解决这类问题。上面的代码是我自己的代码,我知道它错了(除了 Weekday 函数)。非常感谢您的帮助。谢谢

【问题讨论】:

    标签: javascript arrays function prototypejs


    【解决方案1】:

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

    function mostPopularDays(week) { 
    week = [];
    

    然后有一个上下文之外的this,函数mostPopularDaysWeekDay没有任何关系,所以你指的this实际上是mostPopularDays函数本身而不是您提供的预期WeekDay

    据我从描述分配的文本中了解到,mostPopularDays 应该有多个参数,以便过滤出最受欢迎的参数(“@param week an array of Weekday objects”)。

    所以,你的 TODO 列表如下:

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

    我不知道到目前为止你的课程涵盖了哪些遍历数组的方法,有几种:

    • for (var i = 0; i < weekList.length; ++i) { ... }
    • weekList.forEach(function(week) { ... })
    • (如果您已经了解了数组的归约和排序,您可能需要研究这些内容,因为那将是我的首选)

    【讨论】:

      【解决方案2】:

      为了测试,你应该创建对象(天)和对象数组。

      然后对对象进行排序并检查是否有超过 1 天的时间应该返回。

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

      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);

      【讨论】:

        【解决方案3】:

        这很简单,你可以很快理解。

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

        【讨论】:

        • 对代码的解释会很有帮助 - 欢迎来到 Stack Overflow :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-27
        • 1970-01-01
        • 2015-06-28
        • 2011-03-15
        • 2020-08-13
        • 1970-01-01
        相关资源
        最近更新 更多