Как отсортировать массив целых чисел?
Я пытаюсь получить максимальное и минимальное значения из массива, который, как я знаю, будет содержать только целые числа, но это оказывается сложнее, чем я думал.
Вот мой код:
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);
Удачи с кодом!
Сортировка массива объектов по значению строкового свойства
Сортировка массива объектов по значениям свойств
Изменяет ли функция .sort оригинальный массив?
Как удалить все дубликаты из массива объектов?
Как проверить, содержит ли массив строку в TypeScript?