Вход

Просмотр полной версии : Вопросы от новичка по сортировке массивов и функциям


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

Называется передача функции по ссылке, почитай http://javascript.ru/basic/functions#primer-peredachi-funkcii-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 благодарю вас за помощь.