lodash — есть ли способ фильтрации по массиву одного свойства?

#lodash

Вопрос:

 const buttons = [
  { id: 1, text: 'First' },
  { id: 2, text: 'Second' },
  { id: 3, text: 'Third' }
]

const activeButtonIds = [1, 3]
 

Используя lodash, я хочу отфильтровать все кнопки с идентификаторами, не включенными в activeButtonIds = [1, 3] них .

Очевидный способ сделать это -:

_.filter(buttons, ({ id }) => _.includes(activeButtonIds, id))

Но мне было интересно, есть ли более простой способ добиться того же самого? Встроенная функция для этого в lodash?

Ответ №1:

Вы можете использовать _.intersectionWith() для поиска элементов, включенных в оба массива, с помощью функции компилятора:

 const buttons = [{"id":1,"text":"First"},{"id":2,"text":"Second"},{"id":3,"text":"Third"}]
const activeButtonIds = [1, 3]

const result = _.intersectionWith(buttons, activeButtonIds, (button, activeId) =>
  button.id === activeId
)

console.log(result) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG ljU96qKRCWh quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>