2012-05-17 1 views
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()メソッドでやりたいのですか?ちょうど下線を学習し、これまでは非常に便利です。

答えて

29

あなたは以下のようなものをflattenmapでそれを行うことができます:

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

これは、01 Rubyで使用するなので、一部の人にはもっとよく知られていて、pluckに慣れていればより簡潔になります。あなたが本当に何かRubyishをしたい場合、あなたはmapと非匿名関数を使用することができます:

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

私は、この文脈で**摘む**の使用は非常に興味深い発見しました。これは、_seconds_、_thirds_などの抽出方法を提供します。 Rubishのソリューションは、始めから**下線**を使用して、次のコードを1行目として使用することができます: 'var first = function(a){return _.first(a); }; ' –

+1

@ChaosManor:Underscoreに' first.'が必要なこともありません。 '_.first'は' .map(_。first) 'と言うことができます。 –

関連する問題