Às vezes, é bom ter um iterador que pode iterar sobre uma coleção, retornando valores de atributo para cada modelo.
Este padrão é completamente inspirado no padrão Iterator de Stoyan Stefanov ( verifique o livro )
collection = [
{
"handle": "@fat",
"status": "Studying philosophy"
},
{
"handle: "@addyosmani",
"status": "Teaching how to web"
}
];
var makeIterator = function (collection, property) {
var agg = (function (collection) {
var index = 0,
length = collection.length;
return {
next: function () {
var element;
if (!this.hasNext()) {
return null;
}
element = collection[index][property];
index = index + 1;
return element;
},
hasNext: function () {
return index < length;
},
rewind: function () {
index = 0;
},
current: function () {
return collection[index];
}
};
})(collection);
return agg;
};
var iterator = makeIterator(collection, "handle");
// iterator.next() => "@ fat"
// iterator.next() => "@ addyosmani"
// iterator.next() => null