2015-08-04 2 views
0

для практики, я изучаю подчеркивание, содержит с нуля. Есть одна часть кода, которую я не могу сформулировать или понять. Что делает эта линия:Подчеркивание содержит с нуля?

"return item === target;"

Код:

_.contains = function(collection, target) { 

    return _.reduce(collection, function(wasFound, item) { 
     if (wasFound) { 
     return true; 
    } 
     return item === target; 
    }, false); 

};

+0

Что означает «test» === «test», или «test1» === «test2» возвращается в вашу консоль JS? – azium

+0

Он возвращает логическое значение, равное ли «item» и «target». – Xufox

ответ

1

Он просто возвращает логическое значение от обратного вызова до reduce. Результат выражения item === target является булевым (то есть либо true, либо false). Это стенография и (IMO) более-элегантный способ сделать следующее:

if(item === target) { 
    return true; 
} else { 
    return false; 
} 

=== «строгое равенство», что означает, что он не будет выполнять какое-либо тип-принуждение. Вот почему "2" == 2 вернет true, потому что "2" может быть введен в число 2 (и наоборот). Но "2" === 2 вернет false, потому что он не выполняет никакого принуждения типа, и два аргумента имеют разные типы.

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

В ходе первоначального вызова функции reduce, wasFound установлен в false (обратите внимание на false, переданный в вызов reduce после обратного вызова). Первый if не будет удовлетворен, и поэтому функция выполнит оператор return. Возвращаемое значение будет значение wasFound в next Итерация.

Это означает, что до тех пор, как wasFound является false, мы будем стараться, чтобы увидеть, если следующий элемент соответствует тот, который был принят. Если это true, то это означает, что мы нашли элемент, мы хотим и поэтому мы можем просто продолжайте возвращаться true.

IMO функция немного неэффективна, потому что она не срабатывает раньше, как только она обнаружила элемент, который она ищет, и независимо от нее перемещается вся коллекция.

1
if (wasFound) { 
    return true; 
} 

Ты пережил коллекцию, и этот предмет уже найден, и сможем возвратить true.

return item === target; 

В противном случае, вы возвращает истину, если текущий item равно target ищут ты, и false, если это не так.

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