Наследование Javascript - спросить экспертов о следующем коде - PullRequest
0 голосов
/ 04 июля 2018

Мой друг посещает курс JavaScript и считает, что код, который он передает для оценки, правильный. Тем не менее, поддержка грейдера продолжает сообщать, что это неверно. Он попросил меня о помощи, и я проверил код в нескольких IDE и редакторах, онлайн и офлайн, и я также каждый раз получал правильную оценку. Однако я не часто использую JavaScript и я не решаюсь ответить моему другу, что он прав. Я был бы очень признателен, если бы кто-то с большим опытом мог сказать мне, правильно ли оценивает код или нет. Спасибо.

"Определяет, какой день недели посещало зоомагазин наибольшее количество людей.
Если более одного дня недели имеет один и тот же самый высокий объем трафика, должен быть возвращен массив, содержащий дни (в любом порядке).
(напр. ["среда", "четверг"]).
Если входное значение равно нулю или пустой массив, функция должна вернуть ноль.
@param week - массив объектов Weekday
@ возвратить строку, содержащую название самого популярного дня недели, если есть только один самый популярный день, и массив строк, содержащих названия самых популярных дней, если есть более одного, которые наиболее популярны "

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

function mostPopularDays(week) {
    // IMPLEMENT THIS FUNCTION!
    this.week = week;
    if (typeof week !== 'object' || week === null || week === undefined || week.length === 0) {
        return null;
    }

    var maxTr = 0;
    var maxTrDay = [];
    for (var i = 0; i < this.week.length; i++) {
        if (this.week[i].traffic > maxTr) {
            maxTrDay = [this.week[i].name];
            //maxTrDay = this.week[i].name;
            maxTr = this.week[i].traffic;
        } else if (this.week[i].traffic === maxTr) {
            //maxTrDay = [this.week[i].name];
            maxTrDay.push(this.week[i].name);
        } else if (this.week.length > 7) {
            this.week.shift();
        }
    }
    if (maxTrDay.length === 1) {
        console.log("The most popular day of the week was:")
        return maxTrDay[0];
    } else if (maxTrDay > 1) {
        console.log("The most popular days of the week were:")
        return maxTrDay;
    }
    return null;
}

Тестовый пример, который грейдер сообщает как неудачный:
1. MostPopularDays должен возвращать массив дней, когда более одного дня имеет самый популярный трафик

Я использовал следующие строки для тестирования, и вывод всегда был последней (прокомментированной) строкой ниже:

var week = [];
var sun = new Weekday('Sunday', 100); week.push(sun);
var mon = new Weekday('Monday', 90); week.push(mon);
var tue = new Weekday('Tuesday', 100); week.push(tue);
mostPopularDays(week);
// [Sunday, Tuesday]

1 Ответ

0 голосов
/ 04 июля 2018

Проблема (maxTrDay > 1) в сравнении объекта массива с номером 1. Это будет ложным для всех входных данных массива, за исключением, например, путаницы. ([2] > 1), но это JS для вас .

Запуск вашего кода как есть с предоставленным драйвером (с добавленными кавычками к Tuesday, чтобы избежать ReferenceError) приводит к выводу null.

Ваш друг, вероятно, имеет в виду (maxTrDay.length > 1), который сравнивает на основе длины и дает правильный вывод:

The most popular days of the week were:
=> [ 'Sunday', 'Tuesday' ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...