—»     —»   Введение в Underscore.js – Часть 2: коллекции похожие на массивы
  Раздел: Java-Скрипты   Нет комментариев  

Введение в Underscore.js – Часть 2: коллекции похожие на массивы



В первой части мы рассматривали несколько удобных массив-методов, которые нам предоставляет Underscore. Сегодня же мы хотим рассказать вам о синтаксическом приеме, который Underscore предлагает нам для работы с коллекциями, похожими на массивы. Подобные коллекции представляют собой нечто похожее на массивы тем, что представляют собой набор данных, но в данном случае отсутствуют некоторые вещи, доступные при работе с массивами. Например, параметр длины (length).

Введение в Underscore.js – Часть 2: коллекции похожие на массивы

Мы будем использовать следующие javascript-коллекции в примерах, приведенных в данной статье:

var myCollection = {
one: ["one", "two", "three", "four", "five"],
two: [1, 2, 3, 4, 5]
};
var myCollection2 = [
{ name: "Dan", age: 33 },
{ name: "Fred", age: 44 }
];

each()

Метод each() используется для итерации коллекции по типу массива. Он предусматривает минимум 2 аргумента, где первый представляет собой коллекцию, которую нужно итерировать, а второй представляет собой функцию итерации, применяемую к каждому пункту набора данных. Для того чтобы применить данный метод к нашей первой тестовой коллекции, мы можем сделать следующее:

_.each(myCollection, function(item) {
alert(item.length);
});

Аргументы, пропущенные через функцию итерации, будут отличаться в зависимости от типа объекта, который итерируется. Если это стандартный массив, функция будет применена к текущему элементу, к индексу массива, за которым закреплен элемент массива, а также к исходному массиву. Если же этот объект подобен представленному в примере, аргументами будут являться: значение текущего элемента, ключ (параметр Name), а также исходный объект.

Метод each() также может воспринимать третий аргумент, представляющий собой ситуацию, когда должна быть запущена функция итерации. Это может оказаться очень удобным, если использовать each() в рамках callback-функции, так как обычно значение данного объекта теряется внутри этих функций, что может быть скорректировано посредством передачи объекта для того, чтобы использовать его в качестве контекста.

size()

Мы использовали параметр длины в качестве значения нашего предупреждения в предыдущем примере, что сработало ввиду того, что проверяемое нами значение было правильным массивом. Выше мы упомянули одно из отличий между массивами и коллекциями по принципу массивов, которое заключается в отсутствии у последних параметра длины. Немного нудно, не правда ли? Метод size() помогает нам побороть это раздражение, и сообщает нам количество элементов в коллекции:

_.size(myCollection);

В нашем тестовом объекте это приведет к значению равному 2, что может быть удобным, когда нам нужно будет знать, со сколькими элементами мы имеем дело, но не обязательно будем знать, если мы будем работать с массивов или объектом.

pluck()

pluck() – это очень удобный метод, используемый для извлечения совпадающих параметров из серии коллекций. Это может быть очень удобно при работе с чем-то вроде коллекции в Backbone. Для того чтобы «выдернуть» каждое значение имени из нашего тестового массива, мы можем воспользоваться следующим кодом:

_.pluck(myCollection2, "name")

В данном случае наша тестовая коллекция является массивом, где каждый элемент массива будет объектом, содержащим два параметра. Метод возвращает нам массив, содержащий значения, извлеченные из исходной коллекции.

filter()

Метод filter() используется для того, чтобы отфильтровать значения в коллекции, которые не подходят по условиям. Подобно методу each(), он воспринимает коллекции и функцию итерации (опционально еще и контекст), и возвращает нам массив, содержащий лишь те элементы, которые подпадают под условия нашего теста. Для того чтобы подвергнуть фильтрации все элементы нашей второй тестовой коллекции, имена которых не содержат, к примеру, буквы а, мы можем воспользоваться следующим кодом:

_.filter(myCollection2, function (item) {
return item.name.indexOf("a") !== -1;
});

Функция обратного отзыва, которую мы предоставляем, должна оформить логику, необходимую для проверки каждого элемента, и должна вернуть нам либо положительное (true), либо отрицательное (false) значение. Элементы, для которых будет получено отрицательное значение, не будут включены в возращенный массив.

Данный метод также имеет точную противоположность, метод reject(), который возвращает массив, содержащий только те элементы, которые не прошли проверку.

shuffle()

Хотите получить отсортированную коллекцию элементов и перемешать их в случайном порядке беспристрастно? Если да, то метод shuffle() точно вам пригодится. Предположим, что нам нужно перемешать массив, хранящийся в первом ключе нашего тестового объекта. Мы можем сделать это следующим образом:

_.shuffle(myCollection.one)

Алгоритм, использующейся для перемешивания набора данных (коллекции), основан на опробованном методе случайной сортировки, так что вы можете быть уверенными в том, что возвращенный массив будет иметь случайную последовательность. Сродни случаю, когда мы вытаскиваем сложенные отрывки бумаги из шляпы.

sortBy()

Метод sortBy() позволяет нам производить сортировку на основе коллекции по определенному критерию. Например, для того чтобы отсортировать объекты в рамках нашего третьего примера коллекции по предмету параметра name у каждого объекта, мы можем воспользоваться следующим кодом:

_.sortBy(myCollection3, function (item) {
return item.name;
});

Аргументы, используемые в данной функции, имеют те же черты, как и те, что используются с другими методами, которые мы сегодня рассматривали, и состоят из коллекций в качестве первого аргумента, функции итерации в качестве второго и, опционально, контекста в качестве третьего. Функция итерации просто возвращает значение в коллекцию, которую нам нужно отсортировать. Сортировка всегда производится в восходящем порядке.

Мы также можем использовать данный метод с целыми числами, например:

_.sortBy(myCollection3, function (item) {
return item.age;
});

В данном случае, объекты сортируются на основе параметра возраста, что приводит нас к массиву, где первый элемент самый младший, а последний – самый старший.

Завершение

Кроме методов, которые были рассмотрены сегодня, существует множество других методов, которые помогают нам работать с массивами или коллекциями (наборами данных), открывая нам простые и быстрые способы реализации основных задач типа фильтрации, сортировки или перемешивания.

По тому же принципу, как мы работаем с данными в коллекции или возвращаем новые модифицированные коллекции, мы также можем проверить коллекцию, используя другие методы, а именно: all(), который возвращает нам положительное значение (true), если все элементы коллекции проходят проверку по условиям, или any(), который возвращает нам положительное значение, если какой-либо из этих элементов проходит проверку по условиям.

В следующей части нашего руководства мы рассмотрим другие методы для работы исключительно с объектами.
Обнаружили ошибку или мёртвую ссылку?
Выделите проблемный фрагмент мышкой и нажмите CTRL+ENTER.
В появившемся окне опишите проблему и отправьте уведомление Администрации ресурса.
Нужна органическая вечная ссылка из данной статьи? Постовой?
Подробности здесь
Вам понравился материал? Поблагодарить легко!
Будем весьма признательны, если поделитесь этой статьей в социальных сетях:

Ключевые тэги: javascript
Опубликовал Design FactoRy   Прочитано (раз): 7151   |   Нет комментариев
Источник материала / оригинал статьи   Распечатать
Другие статьи и новости по теме:
Добавление комментария
Уважаемые пользователи!
При добавлении комментариев на сайт Вам следует учитывать следующее - все комментарии проверяются Администрацией на предмет отсутствия спама. При обнаружении признаков спама, в оставленном Вами комментарии, сам комментарий будет незамедлительно удалён, а Ваш IP-адрес будет забанен без предупреждения! Учётные записи пользователей, рассылающих спам, блокируются/удаляются без права последующего восстановления.

С уважением, Администрация сайта.
* = поля обязательны к заполнению
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Вопрос : Назовите месяц November по-русски
Подтверждение кода безопасности :

Включите эту картинку для отображения кода безопасности
обновить, если не виден код


Популярные публикации

















Свежие шаблоны сайтов каждый день
С миру по нитке
«    Август 2019    »
ПнВтСрЧтПтСбВс
 1234
567891011
12131415161718
19202122232425
262728293031