2016-02-19 16 views
24

Tôi có chức năng đơn giản để trả lại đối tượng đáp ứng tiêu chí của mình.lodash _.find tất cả các kết quả phù hợp

Mã trông giống như:

var res = _.find($state.get(), function(i) { 
     var match = i.name.match(re); 
     return match && 
      (!i.restrict || i.restrict($rootScope.user)); 
    }); 

Làm thế nào tôi có thể tìm thấy tất cả các kết quả (không chỉ là đầu tiên), đáp ứng các tiêu chí này, nhưng tất cả kết quả.

Cảm ơn bạn đã tư vấn cho anz.

+2

Bạn đang tìm kiếm '_.filter'? – georg

Trả lời

52

Chỉ cần sử dụng _.filter - nó trả về tất cả các mục phù hợp.

_.filter

lặp trên các yếu tố của bộ sưu tập, trả lại một mảng của tất cả các yếu tố predicate lợi nhuận truthy cho. Vị từ được gọi với ba đối số: (value, index | key, collection).

6

Bạn có thể sử dụng _.filter, đi qua trong tất cả các yêu cầu của bạn như sau:

var res = _.filter($state.get(), function(i) { 
     var match = i.name.match(re); 
     return match && 
      (!i.restrict || i.restrict($rootScope.user)); 
    }); 

Link to documentation

3

Without lodash sử dụng ES6, FYI:

dụ cơ bản (được mọi người có độ tuổi dưới 30):

const peopleYoungerThan30 = personArray.filter(person => person.age < 30) 

Ví dụ sử dụng mã của bạn:

$state.get().filter(i => { 
    var match = i.name.match(re); 
    return match && 
      (!i.restrict || i.restrict($rootScope.user)); 
}) 
Các vấn đề liên quan