Консоль Javascript возвращает неправильный отсортированный массив

Я ввел следующий код в хром-консоль.

var array = [25,7,8,41];
array.sort();

Он возвращается [25,41,7,8]. Что происходит?

javascript,arrays,sorting,

2

Ответов: 5


5 принят

Метод sort () сортирует элементы массива.

Порядок сортировки может быть либо буквенным, либо цифровым, либо восходящим (вверх), либо убывающим (вниз).

По умолчанию метод sort () сортирует значения как строки в алфавитном порядке и в порядке возрастания.

Это хорошо работает для строк («Apple» приходит перед «Бананом»). Однако, если числа сортируются как строки, «25» больше, чем «100», потому что «2» больше, чем «1».

Из-за этого метод sort () приведет к некорректному результату при сортировке чисел.

Если вы хотите, чтобы это было исправлено, вы можете написать функцию сравнения в качестве первого параметра, переданного методу сортировки. В ссылке указан один из них!

EDIT: Опубликовано здесь для будущих случаев ...

var points = [40, 100, 1, 5, 25, 10];
function myFunction() {
    points.sort(function(a, b){return a-b});
    console.log(points);
}

Справка


1

По умолчанию метод сортировки сортирует элементы по алфавиту. Для сортировки численно просто добавьте новый метод, который обрабатывает числовые сортировки (sortNumber, как показано ниже) -

 function sortNumber(a,b) {
        return a - b;
    }

    var Array = [25 , 7 , 8 , 41];
    Array.sort(sortNumber);

source Как правильно отсортировать массив целых чисел


1

Все в javascript является объектом по умолчанию, и при попытке сортировки он пытается отсортировать его по алфавиту. Вы должны написать свою собственную функцию сравнения, чтобы отсортировать их в численном порядке с помощью следующего фрагмента кода

var array = [25,7,8,41];
array.sort(sortCompare);
function sortCompare(a,b){
  return a-b;
}
console.log(array);


1

Метод сортировки сортирует элементы массива. Метод сортировки сам по себе интерпретирует элементы как строки. Поскольку «2» в «25» - это меньшее число, чем «7» в «7», он возвращает, что 25 индексируется до 7, например. Для сортировки чисел в порядке возрастания пользователя:

var array = [25,7,8,41];
array.sort(function(a, b){return a-b});

Проверьте этот пример .


0

Чтобы развернуть другие ответы здесь с решением проблемы, с которой вы сталкиваетесь, - на странице массива MDN :

Чтобы сравнить числа вместо строк, функция сравнения может просто вычесть b из a. Следующая функция сортирует массив по возрастанию (если он не содержит Infinity и NaN):

function compareNumbers(a, b) {
    return a - b;
}
JavaScript, массивы, сортировка,
Похожие вопросы