Backbone.js предоставляет набор инструментов для структурирования фронтенд-приложений, где центральную роль играют модели, коллекции и вьюхи. Методы итерации и трансформации являются ключевыми для работы с коллекциями и позволяют эффективно обрабатывать данные.
Backbone.Collection представляет собой упорядоченный
набор моделей одного типа. Основная задача коллекции — хранение моделей
и предоставление удобных методов для работы с ними. Коллекции наследуют
большое количество методов от Underscore.js, включая
методы для итерации и трансформации: each,
map, filter, reduce,
find, sortBy и другие.
eachМетод each позволяет выполнить функцию для каждой модели
коллекции. Он возвращает исходную коллекцию, что позволяет использовать
цепочку вызовов.
var tasks = new Backbone.Collection([
{ id: 1, title: "Сделать домашку", done: false },
{ id: 2, title: "Купить продукты", done: true }
]);
tasks.each(function(task) {
console.log(task.get('title'));
});
Особенности each:
thisArg) для вызова
функции.mapМетод map применяется для трансформации
данных коллекции. Он возвращает новый массив с результатами вызова
функции для каждой модели.
var titles = tasks.map(function(task) {
return task.get('title');
});
// titles = ["Сделать домашку", "Купить продукты"]
Преимущества map:
filter (или
select)Метод filter возвращает массив моделей, удовлетворяющих
заданному условию.
var doneTasks = tasks.filter(function(task) {
return task.get('done');
});
// doneTasks содержит модели с done = true
Важные моменты:
new Backbone.Collection(filteredArray).reduce (или
inject)Метод reduce аккумулирует значения, обходя коллекцию по
порядку. Часто используется для подсчета, суммирования или объединения
данных.
var totalTasks = tasks.reduce(function(sum, task) {
return sum + 1;
}, 0);
// totalTasks = 2
Особенности reduce:
find (или
detect)Метод find возвращает первую модель, удовлетворяющую
условию.
var firstDone = tasks.find(function(task) {
return task.get('done');
});
// firstDone — модель с id = 2
Примечание: если ни одна модель не удовлетворяет
условию, возвращается undefined.
sortByМетод sortBy создает новый массив моделей,
отсортированный по заданному критерию.
var sortedTasks = tasks.sortBy(function(task) {
return task.get('title').length;
});
// Сортировка по длине названия задачи
Особенности:
collection.comparator и
collection.sort().Методы итерации и трансформации можно комбинировать для построения сложной логики обработки данных.
var unfinishedTitles = tasks
.filter(task => !task.get('done'))
.map(task => task.get('title'));
// unfinishedTitles = ["Сделать домашку"]
Преимущества цепочек:
Работа с коллекциями Backbone.js строится на следующих принципах:
map, filter,
sortBy.each для побочных
эффектов, например, логирования или вызова функций в DOM.reduce для вычислений на
основе всех моделей.Методы итерации и трансформации Backbone.js обеспечивают мощный и гибкий инструмент для работы с данными, позволяя создавать читаемый и поддерживаемый код, минимизируя прямое управление коллекциями вручную.