Сортировка массива с использованием функции Javascript — понимание

Я решил получить перетасованные значения из массива. для этого я использовал эту функцию, я получил ее из сети, она отлично работает. Но я не знаю, как это работает...

кто-нибудь может помочь мне понять это?

мой код:

  function rand(ar){
    return 0.5-Math.random();
}
var ar = [5,10,15,20,25]
ar.sort(rand);
console.log(ar)

Я использую эту функцию для получения новых перетасованных значений массива из объявленного.


person 3gwebtrain    schedule 18.10.2011    source источник


Ответы (2)


Этот код использует предоставленную функцию rand в качестве оператора сравнения для метода Array.Sort (http://msdn.microsoft.com/en-us/library/4b4fbfhk%28VS.85%29.aspx). Поскольку Math.random (http://msdn.microsoft.com/en-us/library/41336409.aspx) возвращает значение от 0 (включительно) до 1 (включительно), функция rand возвращает значение от 0,5 (включительно) до -0,5 (включительно).

Обычно функция sortFunction, предоставляемая методу Sort, принимает 2 сравниваемых аргумента. Функция sortFunction сравнивает их и возвращает значение, которое означает:

  • Отрицательный - первый элемент меньше второго
  • Ноль - элементы равны
  • Положительный - первый элемент больше второго

При выполнении метод sort использует это сравнение, чтобы определить, какие значения массива должны идти перед другими.

В случае вашего кода возвращаемое значение функции rand является случайным и не имеет отношения к данным. Это означает, что всякий раз, когда функция sort пытается сравнить два значения в массиве, в половине случаев она скажет, что первый элемент меньше второго, а в половине случаев второй элемент будет меньше первого. Поскольку это делается по всей длине массива, элементы меняются местами случайным образом, и весь массив становится рандомизированным.

person user995048    schedule 18.10.2011

array.sort() имеет необязательный параметр, который является функцией сортировки, вы можете передать ссылку на функцию, чтобы изменить порядок массива.

Возможно, эта страница может быть полезна http://www.javascriptkit.com/javatutors/arraysort.shtml

person Community    schedule 18.10.2011