Сортировка числового массива .sort()

344
17 февраля 2017, 04:38

Необходимо отсортировать массив на нативном 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() массив становится числовым. В чём проблема?

Answer 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; });

Вы, скорее всего, знаете.

Answer 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);

Answer 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);

READ ALSO
Неверно обрабатывается UTF-8 в response()-&gt;setStatusCode() в Laravel

Неверно обрабатывается UTF-8 в response()->setStatusCode() в Laravel

Есть некая форма, с которой отправляются некие данные, отправляются через функцию $ajax():

290
Как найти центр фигуры?

Как найти центр фигуры?

Функция, находящая центр фигуры уже естьНо похоже, она работает не правильно

536
После клика на ссылку, при загрузке страницы сохранить прежние настройки. jquery

После клика на ссылку, при загрузке страницы сохранить прежние настройки. jquery

Добрый деньУ меня есть боковое меню и при клике оно должно быть таким

556