37

CoffeeScriptのドキュメントには、リスト内包表記が選択/フィルター操作を実行できる必要があると記載されています。

それらは、ループ、each / forEach、map、またはselect/filterを使用するほとんどの場所を処理できるはずです。

あなたはあなたが次のような一行で何かをすることができると想像するでしょうresult = item for item in list if item % 2 == 0 しかし私が来ることができる最も近いのは

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

CoffeeScriptでリストをフィルタリングする最も簡潔な方法は何ですか?

4

2 に答える 2

79
result = (item for item in list when item % 2 == 0)

編集:追加result =

于 2011-01-29T22:23:38.847 に答える
8

パフォーマンスのすべてのオンスを絞り出そうとしているのでない限り、私は次のようなフィルター関数を作成します。

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

または、すべてのアレイのプロトタイプに追加する場合:

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

そして書く:(それぞれ)

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

また

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

参考までに、これは生成されるjavascriptです。

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

ここにも同様の質問があります

于 2011-01-30T03:24:45.653 に答える