2012-02-17 48 views
21

有誰知道匹配下劃線數組方法的'pluck'插件嗎?等價的jQuery中的Underscore.js _.pluck

pluck_.pluck(list, propertyName) 

一個便利版本,可能是map最常見的用例:提取屬性值列表。

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

今天Google對我的幫助不大。 任何指針讚賞

回答

30

你可以用表達式來做到這一點;

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

我正要使用上述解決方案,但後來在測試中意識到它與某些邊緣案例中的_.pluck不同。如果上面使用的'name'屬性在數組中的任何對象中都爲null或未定義,則此函數將完全從arr輸出中省略該元素,從而留下比開始時更小的數組。以下內容涵蓋了:var arr = []; $ .each(stooges,function(i,o){return arr.push(o [「name」]);}); – Julie 2014-08-14 20:35:11

9

這是很簡單的自己實現這個功能:

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

它所做的就是遍歷原始數組中的元素(每個都是一個對象),獲得的財產,你從該對象中指定,並將其放入一個新數組中。

22

只寫你自己的

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

在簡單情況:

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

更廣義的:

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

但是,恕我直言,你不應該執行它作爲工具函數,但使用簡單的情況總是