2015-05-17 2 views
3

Я воссоздал ряд методов Underscore.js для изучения JavaScript и программирования в целом.Почему мой метод find не определен?

Ниже приводятся мои попытки воссоздать метод _.find() подстроки.

var find = function(list, predicate) { // Functional style 
    _.each(list, function(elem){ 
     if (predicate(elem)) { 
      return elem; 
     } 
    }); 
}; 

var find = function(list, predicate) { // Explicit style 
    if (Array.isArray(list)) { 
     for (var i = 0; i < list.length; i++) { 
      if (predicate(list[i])) { 
       return list[i]; 
      } 
     } 
    } else { 
     for (var key in list) { 
      if (predicate(list[key])) { 
       return list[key]; 
      } 
     } 
    } 
}; 

Мой второй find метод, который использует for петли и петли for in работы. Принимая во внимание, что мой первый метод find вернет undefined. Я считаю, что обе должны выполнять ту же работу. Однако они этого не делают. Кто-нибудь, пожалуйста, укажите, что происходит?

ответ

3

Ваш return возвращается только из внутренней (вложенной) функции и ваша функция find действительно ничего не возвращает, следовательно undefined.

Попробуйте вместо этого:

var find = function(list, predicate) { // Functional style 
    var ret; 

    _.each(list, function(elem){ 
     if (!ret && predicate(elem)) { 
      return ret = elem; 
     } 
    }); 

    return ret; 
}; 
+0

Черт, ты меня опередил :( –

+0

Спасибо haim770 и php_nub_qq! – KyleC

Смежные вопросы