Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Вопросы от новичка по сортировке массивов и функциям (https://javascript.ru/forum/project/48125-voprosy-ot-novichka-po-sortirovke-massivov-i-funkciyam.html)

iiv 20.06.2014 17:17

Вопросы от новичка по сортировке массивов и функциям
 
Добрый день.

Я изучаю Javascript и прошу помощи по 2м моментам, которые выше моего понимания. Сразу оговорюсь, что теорию я читал и не только на этом сайте, не помогло. Мне важно понять, как именно это работает. Есть скрипт который занимается вычислением минимального и максимального значения массивов, их сортировкой и вычислением "ренджа". Я оформил вопросы в комментариях к коду - буду благодарен за любую помощь.

var class1 = [75, 53, 92, 100, 24, 55, 86, 85, 43, 8, 84, 82, 100, 51];
var class2 = [54, 92, 9, 65, 66, 83, 44, 81, 88, 100];

/* Вопрос 1 - Откуда в сортировочную функцию попадают значения a,b для последующего выполнения функцией и что они из себя представляют? Это элементы массивов class1 и class2? */

function compareNumbers(a, b) {
  return a - b;
}

function min(array) {
  array.sort(compareNumbers);
  return array[0];
}

function max(array) {

/*Вопрос 2 - почему compareNumbers здесь используется без параметров (a,b), а если их подставить, то не работает? */

  array.sort(compareNumbers);
  return array[array.length-1];
}

function range(array) {
  return max(array) - min(array);
}

console.log( range(class1) );
console.log( range(class2) );

Demath 21.06.2014 00:48

Цитата:

Сообщение от iiv
/*Вопрос 2 - почему compareNumbers здесь используется без параметров (a,b), а если их подставить, то не работает? */

Называется передача функции по ссылке, почитай http://javascript.ru/basic/functions...kcii-po-ssylke


Вообще, сортировка для такой задачи избыточна; лучше так

function range1(arr)
{
    var minIndex = 0, maxIndex = 0;
         
    for (var n = arr.length, i = 0; i < n; i++)
    {  if (arr[i] < arr[minIndex]) minIndex = i;
       if (arr[i] > arr[maxIndex]) maxIndex = i;
    }

    return (arr[maxIndex] - arr[minIndex]);
}

Aetae 21.06.2014 06:33

Ещё проще так:
function range(array) {
    return Math.max.apply(Math, array) - Math.min.apply(Math, array);
}
Но вариант Demath быстрее.

iiv 01.07.2014 11:39

Demath, Aetae благодарю вас за помощь.


Часовой пояс GMT +3, время: 07:55.