2012-02-17 12 views
21

アンダースコア配列のメソッドと一致する 'pluck'プラグインを知っている人はいますか?Underscore.jsに相当します.jQueryの_plock

pluck_.pluck(list, propertyName) 

地図の最も一般的な使用例の便利なバージョン:プロパティ値のリストを抽出する。

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

Googleは今日私をあまり助けてくれません。

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

それがないすべてが(対象であるそれぞれの)元の配列の要素を反復され、プロパティにあなたを取得する:多くのそれは、この機能を自分で実装するのは非常に簡単です

答えて

30

式で行うことができます。

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

より一般:

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

私は上記のソリューションを使用しようとしていましたが、いくつかのエッジケースで_plockとは異なることをテストで認識しました。上で使用した 'name'プロパティが配列内の任意のオブジェクトでnullまたは未定義である場合、この関数はarr出力からその要素を完全に省略し、始めより小さい配列を残します。以下は、これを扱っています:var arr = []; $ .each(stooges、function(i、o){return arr.push(o ["name"]);}); – Julie

9

を高く評価し 任意のポインタそのオブジェクトから指定し、新しい配列に配置します。

22

だけの単純なケースで

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

あなた自身の書き込み

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

しかし、私見を、あなたはツールとして、それを実装するべきではありません関数を使用しますが、単純な場合を使用しますは常にです。

関連する問題