2012-02-17 34 views
21

Có ai biết plugin 'ghép' khớp với phương thức mảng dưới không?Tương đương với Underscore.js _.pluck trong jQuery

pluck_.pluck(list, propertyName) 

Phiên bản tiện lợi của trường hợp sử dụng phổ biến nhất cho bản đồ: trích xuất danh sách giá trị thuộc tính.

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

Google hiện không giúp tôi nhiều. Bất kỳ con trỏ nhiều đánh giá cao

Trả lời

30

Bạn có thể thực hiện với biểu thức;

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

Tôi sắp sử dụng giải pháp trên, nhưng sau đó nhận ra trong thử nghiệm rằng nó khác với _.pluck trong một số trường hợp cạnh. Nếu thuộc tính 'name' được sử dụng ở trên là null hoặc undefined trong bất kỳ đối tượng nào trong mảng, hàm này sẽ bỏ qua phần tử đó từ đầu ra arr hoàn toàn, để lại một mảng nhỏ hơn một bắt đầu với. Sau đây bao gồm: var arr = []; $ .each (stooges, function (i, o) {return arr.push (o ["tên"]);}); – Julie

9

Nó khá đơn giản để thực hiện chức năng này tự hỏi:

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

Tất cả nó là lặp qua các phần tử của mảng ban đầu (mỗi trong số đó là một đối tượng), có tài sản bạn chỉ định từ đối tượng đó và đặt nó vào một mảng mới.

22

chỉ viết riêng của bạn

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

Trong trường hợp đơn giản:

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

More tổng quát:

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

Nhưng, IMHO, bạn không nên thực hiện nó như một công cụ nhưng sử dụng trường hợp đơn giản luôn luôn.

Các vấn đề liên quan