2012-02-17 9 views
21

Czy ktoś wie o wtyczce "pluck" pasującej do metody tablicy podkreślenia?Odpowiednik Underscore.js _.pluck w jQuery

pluck_.pluck(list, propertyName) 

Dogodnym wersja tego, co jest chyba najbardziej powszechne stosowanie literami na mapie: wydobywania listę wartości nieruchomości.

var stooges = [{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}]; 
_.pluck(stooges, 'name'); 
=> ["moe", "larry", "curly"] 

Google niewiele mi dziś pomaga. Wszelkie wskazówki mile widziane

Odpowiedz

30

Możesz to zrobić za pomocą wyrażenia;

var arr = $.map(stooges, function(o) { return o["name"]; }) 
+2

Chciałem użyć powyższego rozwiązania, ale potem zdałem sobie sprawę z tego, że różni się on od _.pluck w niektórych przypadkach skrajnych. Jeśli powyższa właściwość 'name' ma wartość null lub undefined w dowolnym obiekcie w tablicy, funkcja ta po prostu pominie ten element z wyjścia arr w całości, pozostawiając mniejszą niż początkowo tablicę. Poniższe obejmuje to: var arr = []; $ .each (słupy, funkcja (i, o) {return arr.push (o ["name"]);}); – Julie

9

Jest to dość proste do wykonania tej funkcji sami:

function pluck(originalArr, prop) { 
    var newArr = []; 
    for(var i = 0; i < originalArr.length; i++) { 
     newArr[i] = originalArr[i][prop]; 
    } 
    return newArr; 
} 

Wszystko robi to iteracyjne nad elementów oryginalnej tablicy (z których każda stanowi przedmiot), uzyskać właściwości, określ z tego obiektu i umieść go w nowej tablicy.

22

wystarczy napisać własne

$.pluck = function(arr, key) { 
    return $.map(arr, function(e) { return e[key]; }) 
} 
1

W prostym przypadku:

var arr = stooges.map(function(v) { return v.name; }); 

Więcej uogólnione:

function pluck(list, propertyName) { 
    return list.map(function (v) { return v[propertyName]; }) 
} 

Ale IMHO, nie należy wdrożyć go jako narzędzie funkcja, ale użyj prostego przypadku zawsze.

Powiązane problemy