2015-06-25 15 views
66

Đối tượng của tôi:Làm thế nào để sử dụng lodash để tìm và trả về một đối tượng từ Array?

[ 
    { 
     description: 'object1', id: 1 
    }, 
    { 
     description: 'object2', id: 2 
    } 
    { 
     description: 'object3', id: 3 
    } 
    { 
     description: 'object4', id: 4 
    } 
] 

Trong chức năng của tôi dưới đây tôi đi qua trong các mô tả để tìm ra ID khớp:

function pluckSavedView(action, view) { 
    console.log('action: ', action); 
    console.log('pluckSavedView: ', view); // view = 'object1' 

    var savedViews = retrieveSavedViews(); 
    console.log('savedViews: ', savedViews); 

    if (action === 'delete') { 
     var delete_id = _.result(_.find(savedViews, function(description) { 
      return description === view; 
     }), 'id'); 

     console.log('delete_id: ', delete_id); // should be '1', but is undefined 
    } 
} 

Tôi đang cố gắng sử dụng phương pháp tìm lodash của: https://lodash.com/docs#find

Tuy nhiên, biến số delete_id của tôi sắp hết không xác định.


Cập nhật cho người kiểm tra câu hỏi này ra, Ramda là một thư viện tốt đẹp để làm lodash samething không, nhưng theo một cách lập trình chức năng hơn :) http://ramdajs.com/0.21.0/docs/

+0

Nó không rõ ràng với tôi tại sao bạn nghĩ '_.find' sẽ kỳ diệu chỉ chuyển một trong các thuộc tính cho hàm gọi lại. Một đơn giản 'console.log (mô tả)' trong gọi lại có thể đã nói với bạn rằng. –

Trả lời

78

Đối số truyền cho gọi lại là một trong các thành phần của mảng. Các phần tử của mảng của bạn là các đối tượng của biểu mẫu {description: ..., id: ...}.

var delete_id = _.result(_.find(savedViews, function(obj) { 
    return obj.description === view; 
}), 'id'); 

Tuy nhiên, một sự thay thế từ các tài liệu bạn có liên quan đến:

_.find(savedViews, 'description', view); 
+2

Cảm ơn! Tôi chỉ phát hiện ra rằng điều này hoạt động quá 'var delete_id = _.result (_. Find (savedViews, {'description': view}), 'id');' Ngoài ra 10 phút nữa ... –

7

Với phương pháp find, callback của bạn sẽ được thông qua giá trị của từng yếu tố, như:

{ 
    description: 'object1', id: 1 
} 

Vì vậy, bạn muốn mã như:

_.find(savedViews, function(o) { 
     return o.description === view; 
}) 
20

Bạn biết bạn có thể làm điều này cũng giống như dễ dàng mà không lodash:

var delete_id = savedViews.filter(function (el) { 
    return el.description === view; 
})[0].id; 

DEMO

+5

Đúng, nhưng lodash có vẻ sạch hơn rất nhiều, tôi không phải sử dụng '[0]' đây là giải pháp mà tôi đang dùng với 'var delete_id = _.result (_. find (savedViews, {'description': view}), 'id '); 'Cảm ơn bạn đã giới thiệu bản trình diễn +1 –

6
var delete_id = _(savedViews).where({ description : view }).get('0.id') 
Các vấn đề liên quan