Hace un par de semanas realice un taller en el SISEI 2011 (No me pregunten que significa, algo de simposio internacional de tortugas marinas o algo así), les dejo el enlace hacia el material con el que se trabajo.
Saludos.
Hace un par de semanas realice un taller en el SISEI 2011 (No me pregunten que significa, algo de simposio internacional de tortugas marinas o algo así), les dejo el enlace hacia el material con el que se trabajo.
Saludos.
A los asistentes a mi desconferencia en el Barcamp V2 sobre funciones en javascript y otras hierbas les dejo el ejemplo final, implementando (badly) una clase que se comporta de manera similar a Linq (Tan solo implemento 3 métodos, select, where y groupBy). Una diferencia primordial es que en esta versión de javascript los métodos corren inmediatamente y no trabajan sobre Enumerables o similares como en .NET.
Para poder probar el código se debe de correr sobre Firefox, debido a que por pereza en el ejemplo del uso de groupBy llamo a toSource para mostrar el resultado y este método esta disponible en chrome.
Saludos.
function Linq(collection) { var items = collection; var iterate = function(operation) { for (var i = 0; i < items.length; i++) { operation(items[i], i); } }; this.reduce = function(init, reductor) { var results = init; iterate(function(item, index){ results = reductor(results, item); }); return results; } this.select = function(selector) { var results = new Array(); iterate(function(item, index) { results[index] = selector(item); }); return new Linq(results); }; this.where = function(filter) { var results = new Array(); var j = 0; iterate(function(item, index) { if (filter(item)) results[j++] = item; }); return new Linq(results); } this.groupBy = function(fieldSelector) { var dict = { }; iterate(function(item, index) { field = fieldSelector(item); if (dict[field] === undefined) dict[field] = { count: 0, items: new Array() }; dict[field].items[dict[field].count] = item; dict[field].count++; }); var i = 0; var results = new Array(); for (var item in dict) results[i++] = { key: item, items: dict[item].items }; return new Linq(results); }; this.toArray = function() { return collection }; this.toString = function() { return this.reduce("", function(base, item) { return base + item + ","; }); }; } function Dude(name, age) { this.name = name; this.age = age; } alert(new Linq([5, 6, 7]) .select(function(i) { return i * 3}) .where(function(i) { return i % 2 == 0 }).toString()); //Shows 18 var dudes = [ new Dude("A", 5), new Dude("B", 5), new Dude("C", 6), new Dude("D", 7), new Dude("E", 8), new Dude("F", 6) ]; var t = new Linq(dudes).groupBy(function (p) { return p.age }).toArray(); for (var i = 0; i < t.length; i++) alert(t[i].key + " - " + t[i].items.toSource());
Hoy: 133
Total: 79876
Desde: January 29, 2009
Actualmente: 0
You are currently browsing the archives for November, 2011.
© 2012 Historias de un Geek · Proudly powered by WordPress & Green Park 2 by Cordobo.
Valid XHTML 1.0 Transitional | Valid CSS 3