Оператор сравнения возвращает неправильное значение - PullRequest
1 голос
/ 24 февраля 2020

У меня есть хороший опыт в программировании, но я новичок в Javascript. Я столкнулся с неожиданным результатом со сравнением в функции if. В приведенной ниже функции есть двойное сравнение в функции if.function. Ожидается, что первое сравнение вернет false, когда .name уже есть в списке. Но один из тестов возвращает набор, где день недели встречается дважды. В отладчике сравнение ls.name != MPopArray[0].name возвращает true, в основном говоря, что "Saturday"!="Saturday" - TRUE. Итак, мой вопрос, как он достигает этого результата?

function mostPopularDays(week) {

week.sort(function (a,b) {return b.traffic-a.traffic})
var       highestTraffic = week[0].traffic
var       MPopArray      = []
MPopArray[0]             = week[0].name

for (const ls of week) {
    if ((ls.name != MPopArray[0].name) && (ls.traffic==highestTraffic)) {
        MPopArray.push(ls.name)
            }
}
return MPopArray
}

Функция перебирает неделю и определяет, какой день недели имел наивысший трафик c. Если более одного дня недели имеет один и тот же трафик c, этот день добавляется в список (например, ["Среда", "Четверг"]). Первое условие в

наборе тестовых данных

    var Test1MPD = [
        { name: 'Thursday', traffic: 100 },
        { name: 'Friday', traffic: 100 },
        { name: 'Saturday', traffic: 101 }
    ];

var Test1ResultMPD = mostPopularDays(Test1MPD)
console.log(Test1MPD) 
console.log(Test1ResultMPD)

В используемом наборе тестовых данных я ожидаю ls.name! = MPopArray [0] .name вернуть ложное условие.

Результат, возвращаемый функцией

 ["Saturday", "Saturday"]

1 Ответ

1 голос
/ 24 февраля 2020

Вы можете отсортировать массив, взять индекс для сравнения traffic следующих элементов и pu sh фактического имени с набором результатов.

function mostPopularDays(week) {
    var index = 0,
        result = [];

    week.sort((a, b) => b.traffic - a.traffic);

    while (index < week.length && week[0].traffic === week[index].traffic) {
        result.push(week[index++].name);
    }

    return result;
}

var test1MPD = [{ name: 'Thursday', traffic: 100 }, { name: 'Friday', traffic: 100 }, { name: 'Saturday', traffic: 101 }];

console.log(mostPopularDays(test1MPD));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...