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

→ Ссылка