convertir coffee list-comprehension coffeescript

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 =