list-comprehension - coffee - js to coff
Filtrar con las comprensiones de la lista CoffeeScript (2)
A menos que estés tratando de exprimir cada onza de rendimiento, crearía una función de filtro como esta:
filter = (list, func) -> x for x in list when func(x)
o si desea agregarlo al prototipo de cada matriz:
Array::filter = (func) -> x for x in @ when func(x)
y luego escribe: (respectivamente)
result = filter mylist, (x) -> x % 2 == 0
o
result = mylist.filter (x) -> x % 2 == 0
Como referencia, este es el javascript que se genera:
var filter, result;
filter = function(list, func) {
var x, _i, _len, _results;
_results = [];
for (_i = 0, _len = list.length; _i < _len; _i++) {
x = list[_i];
if (func(x)) {
_results.push(x);
}
}
return _results;
};
Array.prototype.filter = function(func) {
var x, _i, _len, _results;
_results = [];
for (_i = 0, _len = this.length; _i < _len; _i++) {
x = this[_i];
if (func(x)) {
_results.push(x);
}
}
return _results;
};
result = filter(mylist, function(x) {
return x % 2 === 0;
});
result = mylist.filter(function(x) {
return x % 2 === 0;
});
Hay una pregunta similar here
Los documentos de CoffeeScript indican que las listas de comprensión deberían poder hacer las operaciones de selección / filtro:
Deben ser capaces de manejar la mayoría de los lugares donde de otra manera usaría un bucle, cada / para cada uno, mapa o selección / filtro.
Imagine que podría hacer algo en una línea como result = item for item in list if item % 2 == 0
Sin embargo, lo más cerca que puedo llegar es
list = [1,2,3,4]
result = []
for item in list
if item % 2 == 0 then result.push item
¿Cuál es la forma más concisa de filtrar una lista en CoffeeScript?
result = (item for item in list when item % 2 == 0)
editar : result =
agregado result =