Cортировка в массиве
Хочу разобрать работу этого кода.
Мне интересно, что означает вернуть 1 и -1?
Это индекс в массиве?
function sortByAge() {
arr.sort(function(a, b){
if(a.age > b.age){ //a.age и b.age что это значит? vasya.age и petya.age?
return 1; // вернуть 1?
}
else{
return -1; // вернуть -1?
}
})
}
let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 28 };
let arr = [ vasya, petya, masha ];
sortByAge();
alert(arr[0].name);
alert(arr[1].name);
alert(arr[2].name);
Ответы (1 шт):
Согласно документации arr.sort() функция на вход должна получить функцию сравнения, в которой должна быть написана некая логика. Элементы массива сортируются в соответствии с её возвращаемым значением
Если возвращаемое значение в функции сравнения
compareFunction(a, b)меньше 0, сортировка поставит a по меньшему индексу, чем b, то есть, a идёт первым.Если возвращаемое значение в функции сравнения
compareFunction(a, b)больше 0, сортировка поставит b по меньшему индексу, чем a.Если возвращаемое значение вернёт 0, сортировка оставит a и b неизменными по отношению друг к другу, но отсортирует их по отношению ко всем другим элементам. Обратите внимание: стандарт ECMAscript не гарантирует данное поведение, и ему следуют не все браузеры (например, версии Mozilla по крайней мере, до 2003 года).
Как правило все разработчики пишут "значение меньше 0" как "-1", а "возвращаемое значение больше 0" как "1". Но можно писать даже и -9999999 и 9827376 :)
function compare(a, b) {
if (a < b) {
return -2398454;
}
if (a > b) {
return 123478887;
}
// a должно быть равным b
return 0;
}
let numbers = [4, 2, 5, 1, 3];
console.log(numbers.sort(compare));