Один и тот же код работает по-разному на разных устройствах - PullRequest
1 голос
/ 09 июня 2019

Я новичок в кодировании, все еще учусь.Мой друг дал мне задание написать функцию, которая возвращает второе по величине число из массива, мне удалось сделать это с помощью array.prototype.sort ().Он сказал заменить «-» на «<» или «>», чтобы сделать код более понятным, вот где проблема началась.

Я использую VCS на окнах, и она не работает должным образом.Мой друг использует макинтош, все отлично работает.Пробовал на jsfiddle, все работает нормально.

const secondMax = (arr) => {
  return arr.sort((a, b) => b - a)[1]; //does return the correct number after console.log()
};
const secondMax = (arr) => {
  return arr.sort((a, b) => a < b)[1]; //does not
};

"a b" должен сортировать по возрастанию Но независимо от того, какой оператор я использую, сортировка завершается неудачнои просто возвращает второе число из массива

Ответы [ 2 ]

3 голосов
/ 09 июня 2019

Вы должны вернуть число, а не логическое значение. Итак, первое правильно. Последний может работать случайно на некоторых движках javascript, но это не гарантируется.

0 голосов
/ 09 июня 2019

sort сортирует массив как String по умолчанию. Если вы передадите компаратор, то это function, которое будет зависеть от двух параметров и return:

  • отрицательно, если первый параметр меньше, чем второй
  • 0, если они равны
  • положительно, если первый параметр больше второго

Использование логического оператора вместо вышеуказанного ошибочно.

Однако, если вы заинтересованы в поиске второго по величине числа, лучше сделать это с помощью цикла:

var largestNumbers = [];
var firstIndex = (arr[0] < arr[1]) ? 1 : 0;
largestNumbers.push(arr[firstIndex]);
largestNumbers.push(arr[1 - firstIndex]);
for (var i = 2; i < arr.length; i++) {
    if (largestNumbers[1] < arr[i]) {
        if (largestNumbers[0] < arr[i]) {
            largestNumbers[1] = largestNumbers[0];
            largestNumbers[0] = arr[i];
        }
    }
}

Это быстрее, чем сортировка массива, и, что более важно, он не разрушает ваш начальный порядок только для того, чтобы найти второе по величине число.

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