Javascript Array сортировать функции сравнения странный порядок
Поэтому мне интересно, что не так с моим кодом, который получает аргумент сортировки с сравнением, возвращает правильный порядок для всех чисел, но 5. У меня такое ощущение, что это как-то связано с тем, как я сместил числа 12, 4, 94 и 1. но я полный новичок и очень запутался. Заранее спасибо!
<!DOCTYPE html>
<html>
<head>
<title>Array Manipulation:Sort</title>
<script type="text/javascript">
var parts = [];
parts.push("5", "42", "12");
var removed = parts.pop();
alert(removed);
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
parts.unshift(12, 4, 94, 1);
alert(parts.sort()); //1, 12, 4, 42, 5, 94
alert(parts.sort(compare)); //1, 4, 12, 42, 5, 94
</script>
</head>
</html>
3 ответа
Решение
Я предлагаю рассматривать все значения как число и возвращать дельту с неявным приведением типа к числу.
function compare(value1, value2) {
return value1 - value2;
}
function compare(value1, value2) {
return value1 - value2;
}
var data = [12, 4, 94, 1, "5", "42"];
data.sort(compare);
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Когда вы сравниваете строку с числом, она преобразуется в числа, ищет первый символ, который отличается, а затем действует на основе этого.
"5" > "42"
Явно конвертируйте ваши строки в числа, чтобы это исправить.
function compare(value1, value2) {
value1 = +value1;
value2 = +value2;
Изменить это
var parts = [];
parts.push("5", "42", "12");
в
var parts = [];
parts.push(5, 42, 12);
Так что вы можете сравнить только цифры и для сравнения:
function compare(value1, value2) {
return value1 - value2;
}