36 votes

Filtrer avec les listes de compréhension CoffeeScript

Les documents CoffeeScript indiquent que les compréhensions de liste devraient être capables d'effectuer les opérations de sélection / filtrage:

Ils devraient être capables de gérer la plupart des endroits où vous utiliseriez autrement une boucle, chaque / forEach, map ou select / filter.

Vous imaginez que vous pourriez faire quelque chose sur une ligne comme result = item for item in list if item % 2 == 0 Cependant, le plus proche que je puisse faire est

 list = [1,2,3,4]
result = []
for item in list
  if item % 2 == 0 then result.push item
 

Quelle est la manière la plus concise de filtrer une liste dans CoffeeScript?

78voto

Adrien Points 5142
 result = (item for item in list when item % 2 == 0)
 

modifier : ajouté result =

8voto

Amir Points 3237

Sauf si vous essayez de serrer chaque once de performance, je voudrais créer une fonction de filtre comme ceci:

filter = (list, func) -> x for x in list when func(x)

ou si vous souhaitez l'ajouter sur le prototype de tous les tableaux:

Array::filter = (func) -> x for x in @ when func(x)

et alors écrire: (respectivement)

result = filter mylist, (x) -> x % 2 == 0

ou

result = mylist.filter (x) -> x % 2 == 0

Pour référence, c'est le javascript qui est généré:

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;
});

Il y a une question similaire ici

1voto

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X