如何使用lodash从数组中find并返回一个对象?

我的对象:

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

在我的函数下面我传递的描述来find匹配的ID:

 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 } } 

我正在尝试使用lodash的find方法: https ://lodash.com/docs#find

不过,我的variablesdelete_id是未定义的。


更新的人检查这个问题,拉姆达是一个很好的库,做同样的事情lodash,但在一个更function的编程方式:) http://ramdajs.com/0.21.0/docs/

传递给callback函数的参数是数组中的一个元素。 数组的元素是{description: ..., id: ...}forms的对象。

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

您链接到的文档还有另一种select:

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

lodash和ES5

 var song = _.find(songs, {id:id}); 

lodash和ES6

 let song = _.find(songs, {id}); 

docs https://lodash.com/docs#find

你知道你可以很容易地做到这一点,没有lodash

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

DEMO

使用find方法,您的callback将被传递每个元素的值,如:

 { description: 'object1', id: 1 } 

因此,你需要像这样的代码:

 _.find(savedViews, function(o) { return o.description === view; }) 
 var delete_id = _(savedViews).where({ description : view }).get('0.id')