Этот урок связан с проектом Разбираем Underscore.js по косточкам

Разбираем Underscore.js по косточкам. Метод every

В этой статье мы рассмотрим принцип работы с методом, every, который возвращает true или false в зависимости от того, есть ли в коллекции данные, которые нельзя приравнять к true.

every_.every(list, [predicate], [context])

Так же можно использовать алиас данной функции, а именно метод all.

Во-первых, давайте освежим в памяти как происходит сравнение в JavaScript. К примеру такое сравнение вернёт false, т.к. тут всё очевидно:

var
        x = 1,
        y = 'true';

console.log(x == y); // false

Если же мы будем сравнивать int и bool значения, то тут включаются нюансы. При нестрогом (==) сравнении этих типов результат будет следующий:

var
        x = 1,
        y = true;

console.log(x == y); // true

Если же нам нужно строгое сравнение (с учётом типа данных), то сравнивать нужно с помощью ===.

var
        x = 1,
        y = false;

console.log(x == y); // false

Метод every/all делает эту проверку для нас, проверяя каждое значение в массиве:

// вернет false т.к. в коллекции есть null
// все остальные значения при проверке == true, вернут true
_.all([true, 1, null, 'yes'], _.identity);

В результате из-за одного значения, в общем будет возвращено значение false.

Давайте рассмотрим другие примеры, где мы сможет осуществить проверку самостоятельно:

var values = [true, 1, 'yes'];

var res = _.every(values, function(value){
    return value;
});
console.log(res); // true

var res2 = _.every(values, function(value){
    return (value == true);
});
console.log(res2); // false

var res3 = _.every(values, function(value){
    return (value === true);
});
console.log(res3); // false

В первом случае every вернёт true, т.к. проверяет на равенство с true, по своему. Грубо говоря, возвращает false только при наличии пустой строки, 0 или значения null.

В остальных примерах, будет возвращён false, т.к. некоторые значения не пройдут проверку == и ===.

Использую свои собственные проверки, можем сделать метод every очень полезным. К примеру нам нужно проверить есть ли хоть одно пустое значение во входящих данных. Или есть ли в списке объектов фильм снятый начиная с 2000 года:

var movies = [
    { title: 'Крёстный отец', director: 'Фрэнсис Форд Коппола', year: 1972, budget: 6000000 },
    { title: 'Крёстный отец 2', director: 'Фрэнсис Форд Коппола', year: 1974, budget: 13000000 },
    { title: 'Тёмный рыцарь', director: 'Кристофер Нолан', year: 2008, budget: 185000000 },
    { title: 'Побег из Шоушенка', director: 'Фрэнк Дарабонт', year: 1994, budget: 25000000 },
    { title: 'Криминальное чтиво', director: 'Квентин Тарантино', year: 1994, budget: 8000000 }
];

var res = _.every(movies, function(movie){
    return (movie.year <= 2000);
});

console.log(res); // false

Поскольку в нашем списке есть фильм снятый в 2008, то общая проверка не проходит и возвращается false. Если бы такого фильма не было, то метод every вернул бы значение true.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.ruseller.com
Автор: Станислав Протасевич
Урок создан: 6 Апреля 2014
Просмотров: 5006
Правила перепечатки


5 последних уроков рубрики "Разное"

^ Наверх ^