Tengo dos conjuntos de diccionarios, ambos contienen una propiedad de ID, uno es 'id' y el otro es '_id'.
Estoy tratando de filtrar una matriz que contiene todos los libros disponibles y obtener datos de ella en función de los libros que tiene un usuario.
const books = allbooks.filter(({ id }) => userBooks.findIndex((book) => book._id === id) )Este es el código que estoy usando en este momento, pero no está haciendo lo que esperaba.
Cómo se ven los datos
allbooks [ { id: 1, name: 'Book 1' }, { id: 2, name: 'Book 2' } ] userBooks [ { _id: 1 } ]¿Debo crear una matriz a partir de los _ids de la segunda matriz y filtrar con eso? Estoy tratando de encontrar la mejor manera de hacer esto, estoy usando matrices de diccionarios y a veces me resulta difícil.
Eres tan cercano mi amigo. El problema es que Array.prototype.findIndex devuelve el primer índice en el que su función lambda devuelve verdadero. El índice del libro coincidente es el índice 0, que es falso , lo que hace que su filtro lo ignore porque el resultado de la función de filtro lambda es falso.
En su lugar, puede verificar si el resultado de su findIndex es> -1 ya que Array.prototype.findIndex devuelve -1 si no se encuentra el elemento.
const allbooks = [ { id: 1, name: 'Book 1' }, { id: 2, name: 'Book 2' } ]; const userBooks = [ { _id: 1 } ]; const books = allbooks.filter(({ id }) => userBooks.findIndex((book) => book._id === id) > -1 ) console.log(books);