Как отсортировать массив целых чисел?
Я пытаюсь получить максимальное и минимальное значения из массива, который, как я знаю, будет содержать только целые числа, но это оказывается сложнее, чем я думал.
Вот мой код:
var numArray = [140000, 104, 99];
numArray = numArray.sort();
console.log(numArray);
Я ожидал увидеть вывод 99, 104, 140000
. Вместо этого я получаю 104, 140000, 99
. Похоже, что функция сортировки обрабатывает значения как строки.
Есть ли способ заставить функцию сортировки сортировать по целочисленному значению каждого элемента массива?
5 ответ(ов)
Можно дополнить все вышеперечисленные ответы, выполненные в одну строку, следующим образом:
var numArray = [140000, 104, 99].sort(function (a, b) { return a - b; });
// результат: 99, 104, 140000
Этот способ позволяет сразу же отсортировать массив чисел без необходимости создавать промежуточную переменную.
Вместо того чтобы использовать просто .sort()
, попробуйте использовать .sort((a, b) => a - b)
. Это гарантирует, что ваш массив будет отсортирован по числовому порядку. Также стоит отметить, что сортировка происходит "на месте", поэтому возвращаемое значение не имеет значения.
Вот пример кода:
var numArray = [140000, 104, 99];
numArray.sort((a, b) => a - b);
console.log(numArray);
В результате вы получите отсортированный массив: [99, 104, 140000]
.
Для сортировки массива по возрастанию используйте следующий код:
arr.sort((a, b) => a - b);
Для сортировки по убыванию используйте такой код:
arr.sort((a, b) => b - a);
А вот забавный факт: сортировку по убыванию можно получить, сначала отсортировав массив по возрастанию, а затем применив метод reverse()
:
arr.sort((a, b) => a - b).reverse();
Таким образом, вы можете использовать различные подходы в зависимости от ваших требований к сортировке.
Я согласен с aks, однако вместо использования
return a - b;
вам следует использовать
return a > b ? 1 : a < b ? -1 : 0;
Это позволит более явно указать результат сравнения, что может быть полезно в контексте функций сравнения, например, в сортировке.
На вопрос уже дан ответ, самый короткий способ - использовать метод sort()
. Но если вы ищете больше способов сортировки своего массива чисел и любите циклы, обратите внимание на следующие варианты.
Сортировка вставками
По возрастанию:
var numArray = [140000, 104, 99];
for (var i = 0; i < numArray.length; i++) {
var target = numArray[i];
for (var j = i - 1; j >= 0 && (numArray[j] > target); j--) {
numArray[j + 1] = numArray[j];
}
numArray[j + 1] = target;
}
console.log(numArray);
По убыванию:
var numArray = [140000, 104, 99];
for (var i = 0; i < numArray.length; i++) {
var target = numArray[i];
for (var j = i - 1; j >= 0 && (numArray[j] < target); j--) {
numArray[j + 1] = numArray[j];
}
numArray[j + 1] = target;
}
console.log(numArray);
Сортировка выбором:
По возрастанию:
var numArray = [140000, 104, 99];
for (var i = 0; i < numArray.length - 1; i++) {
var min = i;
for (var j = i + 1; j < numArray.length; j++) {
if (numArray[j] < numArray[min]) {
min = j;
}
}
if (min != i) {
var target = numArray[i];
numArray[i] = numArray[min];
numArray[min] = target;
}
}
console.log(numArray);
По убыванию:
var numArray = [140000, 104, 99];
for (var i = 0; i < numArray.length - 1; i++) {
var min = i;
for (var j = i + 1; j < numArray.length; j++) {
if (numArray[j] > numArray[min]) {
min = j;
}
}
if (min != i) {
var target = numArray[i];
numArray[i] = numArray[min];
numArray[min] = target;
}
}
console.log(numArray);
Удачи с кодом!
Сортировка массива объектов по значению строкового свойства
Сортировка массива объектов по значениям свойств
Как перемешать (сделать случайным) массив в JavaScript?
Как очистить массив в JavaScript?
Выбор последнего элемента в массиве JavaScript