Я едва использовал lodash, и я пытаюсь использовать его сейчас для простой задачи.Глубокий выбор массива с lodash
У меня есть рабочее решение, но оно выглядит сложным, и мне интересно, есть ли легкая стенография задачи с помощью библиотечных утилит.
items
представляет собой массив объектов, такие как следующие:
{
id: ‘string’,
val_1: ‘string’,
val_2: ‘string’,
components: array of: {
val_3: ‘string’,
val_4: ‘string’,
types: array of strings
}
}
Я хочу, чтобы выбрать объект, компоненты которого массив содержит допустимых типов. Допустимые типы определяются мной в массиве из примерно 10 строк. Это мое решение:
var validTypes = [‘type1’,’type3’,’type5’];
var desired = _.find(items, (item) => {
var allowed = true;
_.forEach(item.components, (component) => {
// Remove valid types. What's left should be empty.
_.pullAll(component.types, validTypes);
allowed = allowed && _.isEmpty(component.types);
})
return allowed;
});
Как сказал мне интересно, как это может быть улучшено, я чувствую, что я не использую lodash правильно.
Лично я думаю, что он читает проще, если вы замените '_.isEmpty()' логику: '_.every (component.types, тип => _.includes (validTypes, тип))' – Retsam
Я согласен, но это может замедлить производительность. – Meir
Если не указано иное, читаемость превосходит производительность, imo. (Хотя я не понимаю, почему это было бы менее результативным, чем '_.difference') – Retsam