Как использовать lodash для поиска и возврата объекта из массива?



объекты:



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


в моей функции ниже я передаю описание, чтобы найти соответствующий идентификатор:



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 найдем способ: https://lodash.com/docs#find



однако моя переменная delete_id выходит неопределенным.





обновление для людей, проверяющих этот вопрос, Ramda-хорошая библиотека, чтобы сделать то же самое, что делает lodash, но в более функциональном программировании путь :)
http://ramdajs.com/0.21.0/docs/

649   6  

6 ответов:

В аргумент функции является одним из элементов массива. Элементами массива являются объекты вида {description: ..., id: ...}.

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

еще одна альтернатива из документов, которые вы связали с (lodash v3):

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

Лодаш v4:

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

лодаш и ES5

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

лодаш и ES6

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

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

вы знаете, вы можете сделать это так же легко, без lodash:

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

демо

С find метод, ваш обратный вызов будет передан значение каждого элемента, например:

{
    description: 'object1', id: 1
}

таким образом, вы хотите код:

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

Вы можете использовать следующие

import { find } from 'lodash'

затем, чтобы вернуть весь объект (не только его ключ или значение) из списка следующим образом:

let match = find(savedViews, { 'ID': 'id to match'});

Comments

    Ничего не найдено.