10

配列の配列があり、配列内の各配列の最初の要素を返したいとします。

array = [[["028A","028B","028C","028D","028E"],
          ["028F","0290","0291","0292","0293"],
          ["0294","0295","0296","0297","0298"],
          ["0299","029A","029B","029C","029D"],
          ["029E","029F","02A0","02A1","02A2"]],
         [["02A3","02A4"],
          ["02A5", "02A6"]];

私はこのようなことができることを知っています:

var firsts = [];
_.each(array, function(item){
  _.each(item, function(thisitem){
    firsts.push(_.first(thisitem));
  });
});

_.chain()しかし、アンダースコアの方法でそれをしたい場合はどうすればよいですか? アンダースコアを学ぶだけで、これまでのところ非常に役に立ちます。

4

1 に答える 1

30

flattenしたがって、次のようにしてそれを行うことができmapます:

var firsts = _.chain(array)
              .flatten(true) // This true is important.
              .map(function(a) { return a[0] })
              .value();

デモ: http://jsfiddle.net/ambiguous/cm3CJ/

使用flatten(true)して、配列の配列の配列を配列の配列に変換してからmap、各内部配列の最初の要素を剥がします。

よりも短いものが必要な場合は、内側の配列の最初の要素を引き出すためにmap使用できます。pluck

var firsts = _.chain(array)
              .flatten(true) // This true is important.
              .pluck(0)
              .value();

デモ: http://jsfiddle.net/ambiguous/pM9Hq/

_.pluckとにかくただのmap呼び出しです:

// Convenience version of a common use case of `map`: fetching a property.
_.pluck = function(obj, key) {
  return _.map(obj, function(value){ return value[key]; });
};

これは、Ruby で使用する によく似ている.map(&:first)ため、一部の人にはなじみがあり、慣れればより簡潔になるかもしれませんpluck。本当にRubyっぽいものが欲しいなら、非匿名関数を次のように使うことができますmap:

var first  = function(a) { return a[0] };
var firsts = _.chain(array)
              .flatten(true) // This true is important.
              .map(first)
              .value();
于 2012-05-17T18:06:56.257 に答える