Грядет ES2015 aka ES6 aka Harmony. Пора тренироваться на домашних проектах!
Есть готовая функция, которая принимает на вход массив объектов вида {entities: []} и итерирует по ним, типа такого:
function iterateEntities (arr, iterator) {
for (let item of arr) {
for (let [index, entity] of item.entities.entries()) {
iterator(entity, index, item);
}
}
}
Хочу итерировать по моделям коллекции, как будто это точно такие же plain-объекты, чтобы заюзать эту функцию.
Получилось так:
'use strict';
import Skull from 'backbone-skull';
function collectionIterator (models) {
return {
_i: -1,
next: function () {
return {
value: models[this._i + 1].attributes,
done: models.length - 1 === ++this._i
}
}
}
}
class CollectionAbstract extends Skull.Collection {
[Symbol.iterator] () {
return collectionIterator(this.models);
}
}
export default CollectionAbstract;
Тесты показывают, что работает, как задумано, но как-то неизящно. Нельзя ли как-то покрасивше, без этих вот
++this._i
? Я плохо понимаю генераторы, может, с ними будет лучше?