Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не могу понять логику (https://javascript.ru/forum/misc/42896-ne-mogu-ponyat-logiku.html)

eudji 13.11.2013 14:31

Не могу понять логику
 
Тест для начинающих с Codecademy

дан изначальный код:

var lost = [4, 8, 15, 16, 23, 42];
var count = lost.length;
var isLost = function (n) {
  for ( ) {
    if ( n === lost[i]) {
      return ;
    }
  }
  return ;
};

if ( isLost(12) ) {
  console.log('12 is a lost number');
}

if ( isLost(16) ) {
  console.log('16 is a lost number');
}


Задание такое: дописать функцию isLost так, чтобы при проверке числа n цикл возвращал значения true или false. таким образом будет производится проверка является число isLost или нет.

Вопросы:
1) зачем в коде эта строка var count = lost.length; ?
переменная count далее нигде не используется. Так зачем? Запутать новичка?
2) я дописал условие FOR и получилось следующее

var lost = [4, 8, 15, 16, 23, 42];
var count = lost.length;

var isLost = function (n) 
{
  for (i = 0; i < n; i++) 
    { 
        if ( n === lost[i]) 
            {
                return;
            }
    }
  return ;
};

if ( isLost(12) ) {
  console.log('12 is a lost number');
}

if ( isLost(16) ) {
  console.log('16 is a lost number');
}


вызывает смешанные чувства куски "function (n)" и пустой return. Откуда взялась n, чему равна?
При исправлении на return n; программа выполняется и тест считается пройденным.

Кто уже не такой кран в java как я, и кому не лень, объясните плз пункты 1 и 2.

ruslan_mart 13.11.2013 14:42

Что-то всё уж слишком заумно сделано :)

var lost = [4, 8, 15, 16, 23, 42];

function isLost(n) {
   return !!(lost.indexOf(n) + 1);
}

if(isLost(12)) alert('12 is a lost number');

if(isLost(16)) alert('16 is a lost number');

animatio 13.11.2013 14:55

Я так понимаю, что задание таково.
Есть массив lost.
Функция isLost должна перебирать lost с помощью цикла и проверять есть ли в нем n.
Тогда функция lost имеет следующий вид:
var isLost = function (n) {
  for (var i = 0; i <  count; i++) {
    if ( n === lost[i]) {
      return true;
    }
  }
  return false;
};

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

for (var i = 0; i <  lost.length; i++)


то в каждой итерации будет обращение к свойству length обьекта lost, а это - дополнительное время. А так мы занесли значение lost.length в переменную и тем самым немного оптимизировали работу цикла

ksa 13.11.2013 14:56

Цитата:

Сообщение от eudji (Сообщение 280822)
дан изначальный код:

var lost = [4, 8, 15, 16, 23, 42];
var count = lost.length;
var isLost = function (n) {
  for ( ) {
    if ( n === lost[i]) {
      return ;
    }
  }
  return ;
};

if ( isLost(12) ) {
  console.log('12 is a lost number');
}

if ( isLost(16) ) {
  console.log('16 is a lost number');
}


Задание такое: дописать функцию isLost так, чтобы при проверке числа n цикл возвращал значения true или false. таким образом будет производится проверка является число isLost или нет.

Дописываю! :D

var lost = [4, 8, 15, 16, 23, 42];
var count = lost.length;
var isLost = function (n) {
  for (var i=0; i<count; i++ ) {
    if ( n === lost[i]) {
      return false;
    }
  }
  return true;
};

if ( isLost(12) ) {
  alert('12 is a lost number');
  //console.log('12 is a lost number');
}

if ( isLost(16) ) {
  alert('16 is a lost number');
  //console.log('16 is a lost number');
}

ksa 13.11.2013 14:58

animatio, правильно начал... :yes:
Но его обманули аглицкие словечки в конце... :( Что повлияло на не правльный (по заданию) возврат значений из функции.

ЕПРСТ, это просто тест на понимание некой части галиматьи. :D И не более того...

ksa 13.11.2013 15:00

Цитата:

Сообщение от eudji
вызывает смешанные чувства куски "function (n)" и пустой return. Откуда взялась n, чему равна?

Это как кроссворд или сканворд (х/з как там их). :D
Нужно правильно заполнить "пустые клеточки"...

eudji 13.11.2013 15:06

О, благодарствую.
Просто не хочется дальше продолжать обучение, не поняв данный кусочек.

ksa 13.11.2013 15:09

Цитата:

Сообщение от eudji
Просто не хочется дальше продолжать обучение, не поняв данный кусочек.

Да это просто тест. :)
Я бы сказал, что весьма интересный и занимательный.


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