Сортировка, метод sort(fn)

92
08 июня 2019, 16:00

Объясните почему получилось от меньшего к большему ?

function compareNumeric(a, b) { 
  if (a > b) return 1; 
  if (a < b) return -1; 
} 
 
var arr = [ 1, 22, 15 ]; 
 
arr.sort(compareNumeric); 
 
alert(arr);

Answer 1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Syntax

function compareNumeric(a, b) { 
  console.log("comparing", a, b); 
  return a - b; 
} 
 
var arr = [ 1, 22, 15 ]; 
 
arr.sort(compareNumeric); 
 
console.log(JSON.stringify(arr));

что он делает с 1 я не могу понять ?

Метод sort сам "не знает", как сравнить два элемента массива. Но это знаем мы, и мы передаем это знание методу sort через параметр - функцию compare. Метод sort всегда стремится разместить элементы массива в порядке возрастания. Метод sort в своем алгоритме доходит до места, где ему надо сравнить два элемента массива. Метод sort вызывает функцию compare с этими двумя элементами и получает результат. Если этот результат меньше нуля - первый элемент (первый - в том порядке, в каком эти два элемента были переданы в функцию compare) меньше второго. Если результат больше нуля - первый элемент больше второго. Если результат - ноль, элементы считаются одинаковыми для целей текущей сортировки. Теперь метод sort знает, как соотносятся два элемента, которые ему надо было сравнить и может переставлять (или не переставлять) их для создания сортированного массива.

Answer 2

Вы попробуйте сначала документацию почитать, прежде чем вопросы задавать

Если функция сравнения compareFunction предоставлена, элементы массива сортируются в соответствии с её возвращаемым значением. Если сравниваются два элемента a и b, то:

  • Если compareFunction(a, b) меньше 0, сортировка поставит a по меньшему индексу, чем b, то есть, a идёт первым.
  • Если compareFunction(a, b) вернёт 0, сортировка оставит a и b неизменными по отношению друг к другу, но отсортирует их по отношению ко всем другим элементам.
    Обратите внимание: стандарт ECMAscript не гарантирует данное поведение, и ему следуют не все браузеры (например, версии Mozilla по крайней мере, до 2003 года).
  • Если compareFunction(a, b) больше 0, сортировка поставит b по меньшему индексу, чем a.
  • Функция compareFunction(a, b) должна всегда возвращать одинаковое значение для определённой пары элементов a и b. Если будут возвращаться непоследовательные результаты, порядок сортировки будет не определён.
READ ALSO
treeview manager компонент

treeview manager компонент

не могу найти treeview компонент которого использовать в другой модели yii2 То есть при создании записи в другой модели (таблице) выбираю treeview компонента...

116
в обратном порядке расположить слово

в обратном порядке расположить слово

Когда добавляешь цифры в массив он переворачивает, а добавляешь строку не переворачивает хотя видит ее длину

125
Puppeteer в exe файл! zeit/pkg

Puppeteer в exe файл! zeit/pkg

Нужно puppeteer скомпилировать в exe файл! Пробую zeit/pkg но выбивает всегда ошибку http://prntscrcom/lthfx5 Искал проблему на github, все перепробовал - не помогло...

113
Как ограничить ввод на кириллицу?

Как ограничить ввод на кириллицу?

как ограничить ввод кириллицой?

145