http://mnmly.github.io/library/coffeescript/04_idioms.html

経緯

例えばCoffeeScriptで以下のような配列があったとき、

politicians = [
  {"name": "abe", "role": "prime minister"}
  {"name": "aso", "role": "via prime minister"}
  {"name": "masuzoe", "role": "tax consumer"}
]

["abe", "aso", "masuzoe"]という配列を返して欲しいなーと思ったとき、Rubyだったら以下のようにかけます。

result = politicians.map{|item| item.name }

CoffeeScriptで同じように簡単にかけないかなーと思ったお話。

やり方

調べてみたら案の定ありました。

result = (item.name for item in politicians)

このとき、カッコを忘れてしまうと動かないので注意しましょう。

ちなみに、吐き出されるJavaScriptは以下のようなものです。

var item, result;

result = (function() {
  var i, len, results;
  results = [];
  for (i = 0, len = politicians.length; i < len; i++) {
    item = politicians[i];
    results.push(item.name);
  }
  return results;
})();

まとめ

「あるかも」と思って調べてみると、意外とある。