Estoy tratando de unir tres matrices en función de las identificaciones coincidentes, pero si las publicaciones o los "me gusta" son "indefinidos", entonces termina rompiendo el código, ¿cómo aplicaría el condicionamiento a esto? Si la matriz no está definida, debería volver vacío y si no se debe realizar el filtrado.
//sample data const posts = [ { _id: 1 , message: 'this is post one' , likes: [ { _id: 1111 } , { _id: 2222 } ] , comments: [ { _id: 3333 } , { _id: 4444 } ] } ] const comments = [ { _id: 3333, message: 'this is comment 1' } , { _id: 4444, message: 'this is comment 2' } ] const likes = [ { _id: 1111, user: 'Peter' } , { _id: 2222, user: 'John' } ] const newPosts = posts.map(post => ({ ...post, likes: likes.filter(like => post.likes.map(like => like._id).includes(like._id)), comments: comments.filter(comment => post.comments.map(comment => comment._id).includes(comment._id)), }))lo que he intentado
const newPosts = posts.map(post => ({ ...post, likes: likes.filter(like => like === undefined ? '': post.likes.map(likes => likes._id).includes(like._id)), comments: comments.filter(comment => comment === undefined ? '': post.comments.map(comments => comments._id).includes(comment._id)), }))el uso para esto es socket.io emite cambios desde mi base de datos con los tres sockets diferentes, puedo tomar las tres matrices que contienen los cambios y unirlas en una "publicación" de matriz actualizada al hacer coincidir las ID, es decir, los comentarios / La matriz de me gusta puede terminar vacía de vez en cuando, por lo que me gustaría aplicar el condicionamiento de que verificará si está indefinido o no. Si no está definido, debería devolver el valor de una matriz vacía; de lo contrario, debería ocurrir la acción filter(), ¿sería esto posible? He estado atascado en esto por un tiempo, por lo que agradecería mucho cualquier ayuda.
Prueba esto:
const posts = [{ _id: 1, message: 'this is post one', likes: [{ _id: 1111 }, { _id: 2222 }], comments: [{ _id: 3333 }, { _id: 4444 }] }]; const comments = [{ _id: 3333, message: 'this is comment 1' }, { _id: 4444, message: 'this is comment 2' }]; const likes = [{ _id: 1111, user: 'Peter' }, { _id: 2222, user: 'John' }]; const newPosts = posts.map((post = {}) => ({ ...post, likes: likes.filter((like = {}) => post.likes.find((likeItem = {}) => likeItem._id === like._id) ).map(like => like._id), comments: comments.filter((comment = {}) => post.comments.find((commentItem = {}) => commentItem._id === comment._id) ).map(comment => comment._id), })); console.log(newPosts);