Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.06.2014, 17:17
iiv iiv вне форума
Новичок на форуме
Отправить личное сообщение для iiv Посмотреть профиль Найти все сообщения от iiv
 
Регистрация: 13.11.2012
Сообщений: 2

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

Я изучаю 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) );
Ответить с цитированием
  #2 (permalink)  
Старый 21.06.2014, 00:48
Аватар для Demath
Профессор
Отправить личное сообщение для Demath Посмотреть профиль Найти все сообщения от Demath
 
Регистрация: 22.06.2012
Сообщений: 168

Сообщение от 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]);
}

Последний раз редактировалось Demath, 21.06.2014 в 01:12.
Ответить с цитированием
  #3 (permalink)  
Старый 21.06.2014, 06:33
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

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

Последний раз редактировалось Aetae, 21.06.2014 в 06:47.
Ответить с цитированием
  #4 (permalink)  
Старый 01.07.2014, 11:39
iiv iiv вне форума
Новичок на форуме
Отправить личное сообщение для iiv Посмотреть профиль Найти все сообщения от iiv
 
Регистрация: 13.11.2012
Сообщений: 2

Demath, Aetae благодарю вас за помощь.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы новичка bear9 Общие вопросы Javascript 7 24.09.2011 12:51