#javascript #native
This question already has an answer here: Сортировка в JavaScript (1 ответ) Закрыт 1 год назад. Необходимо отсортировать массив на нативном JS. Код: var inputStr = '235 1 0.9 -5 -98 25 -634.1'; var nArr; function getConverArray(arr) { for (var i = 0; i < arr.length; i++) { arr[i] = +arr[i]; } return arr; } nArr = getConverArray(inputStr.split(' ')); alert(nArr); nArr.sort(); alert(nArr); .sort() всё равно сортирует массив как символьный, хотя после функции getConverArray() массив становится числовым. В чём проблема?
Ответы
Ответ 1
https://www.w3schools.com/jsref/jsref_sort.asp By default, the sort() method sorts the values as strings in alphabetical and ascending order. По умолчанию, метод sort сортирует значения как строки в алфавитном порядке, по возрастанию. https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort The default sort order is according to string Unicode code points. Про nArr.sort(function(a, b){ return a-b; }); Вы, скорее всего, знаете. Пример из Проблемма с сортировкой массива function median(data) { data.sort((a, b) => a - b); return data; } console.log(median([1, 2, 3, 4, 5])); console.log(median([3, 1, 2, 5, 3])); console.log(median([1, 300, 2, 200, 1])); console.log(median([3, 6, 20, 99, 10, 15]));Ответ 2
.sort в любом случае сортирует массив как строку. Если нужно изменить его поведение, то нужно использовать функцию определяющую порядок сортировки. Подробнее можно посмотреть в любом описании метода sort, а рабочий пример есть ниже. var inputStr = '235 1 0.9 -5 -98 25 -634.1'; var nArr; nArr = inputStr.split(' '); alert(nArr); nArr.sort(function(a, b) { return a-b; }); alert(nArr);Ответ 3
var inputStr = [5, 2, 1, -10, 8]; function compare(a, b) { return a - b; } inputStr.sort(compare); console.log(inputStr); и в обратном порядке: var inputStr = [5, 2, 1, -10, 8]; function compare(a, b) { return b - a; } inputStr.sort(compare); console.log(inputStr);
Комментариев нет:
Отправить комментарий