Come si fa a utilizzare il carattere di sottolineatura della catena metodo restituisce il primo elemento di un array multidimensionale?

Dire che ho un array di array, e voglio restituire il primo elemento di ogni matrice all’interno della matrice:

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"]];

So che posso fare qualcosa di simile a questo:

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

ma se voglio farlo con un carattere di sottolineatura del _.chain() metodo? Solo l’apprendimento di sottolineatura, e finora mi sembra molto utile.

 

One Reply
  1. 30

    Si potrebbe fare con unico e mappa protettori così:

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

    Demo: http://jsfiddle.net/ambiguous/cm3CJ/

    Si utilizza flatten(true) per convertire l’array di array di array in un array di array e poi il map stacca il primo elemento di ciascuna interno della matrice.

    Se volete qualcosa di più corto del map, si potrebbe utilizzare cogliere per estrarre il primo elemento dell’interno matrici:

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

    Demo: http://jsfiddle.net/ambiguous/pM9Hq/

    _.cogliere è solo un map chiamata in ogni caso:

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

    Questo sembra molto più simile a quella .map(&:first) che si usa in Ruby quindi potrebbe essere più familiare per alcune persone e concisa, una volta che sei abituato a pluck. Se si desidera veramente qualcosa Rubyish, si potrebbe utilizzare un non-funzione anonima con map:

    var first  = function(a) { return a[0] };
    var firsts = _.chain(array)
                  .flatten(true) //This true is important.
                  .map(first)
                  .value();
    • Ho trovato l’uso di cogliere molto interessante in questo contesto. Prepara il terreno per l’estrazione di secondi, terzi, e così via. Il Rubish soluzione, l’utilizzo di sottolineatura fin dall’inizio, come prima riga di codice riportato di seguito: var first = function(a) { return _.first(a); };
    • Non avresti neanche bisogno di first nella tua Sottolineatura è _.first, si può solo dire .map(_.first).

Lascia un commento