Estoy tratando de insertar nuevos datos si no existen en la matriz anidada, hasta ahora puedo agregar si no existen, pero está eliminando los datos anteriores, cualquier ayuda sería apreciada.
arreglos
const posts = [ { _id: 1 , message: 'this is post one' , likes: [ { id: 111221, user: 'random 1' } , { id: 2223422, user:'random 2' } ] , comments: [ { id: 332233, message: 'random comment' } , { id: 2344444, message:'another random comment' } ] }] 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' } ]Rendimiento esperado
const newPost = [ { _id: 1 , message: 'this is post one' , likes: [ { id: 1111, user: 'Peter' } , { id: 111221, user: 'random 1' } , { id: 2223422, user:'random 2' } , { id: 2222, user: 'John' } ] , comments: [ { id: 3333, message: 'this is comment 1' } , { id: 4444, message: 'this is comment 2' }, { id: 332233, message: 'random comment' } , { id: 2344444, message:'another random comment' } ] }]lo que he probado
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)), })) console.log(newPosts)Tal vez estoy demasiado cansado, pero simplemente fusionaría las matrices. Su publicación no mencionó que necesitaba verificar si los comentarios en la variable comments ya podrían existir en publicaciones [0]. comentarios ( _id: 1 ).
const posts = [{ _id: 1, message: 'this is post one', likes: [{ id: 111221, user: 'random 1' }, { id: 2223422, user: 'random 2' }], comments: [{ id: 332233, message: 'random comment' }, { id: 2344444, message: 'another random comment' }] }] 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 addTo = (posts, comments, likes) => { let newPostInstance = [...posts][0]; newPostInstance.comments = [...newPostInstance.comments, ...comments]; newPostInstance.likes = [...newPostInstance.likes, ...likes]; return newPostInstance; } const newPost = addTo(posts, comments, likes); console.log(newPost)const posts1 = [ { _id: 1 , message: 'this is post one' , likes: [ { id: 111222221, user: 'random 1' } , { id: 2223422, user:'random 2' } ] , comments: [ { id: 3322222233, message: 'random comment' } , { id: 2344444, message:'another random comment' } ] }] const posts = [ { _id: 1 , message: 'this is post one' , likes: [ { id: 111221, user: 'random 1asdasdasd' } , { id: 2223422, user:'random 2asdasdasd' } ] , comments: [ { id: 332233, message: 'rasdasdasd' } , { id: 2344444, message:'asdasdasdwwwwww' } ] }] if(posts.filter(r => r.comments) !== posts1.filter(r => r.comments)){ const a = posts.map(({likes,_id,message, ...o}) => ({...o.comments})) const b = posts1.map(({likes,_id,message, ...o}) => ({...o.comments})) const c = posts.map(({comments,_id,message, ...o}) => ({...o.likes})) const d = posts1.map(({comments,_id,message, ...o}) => ({...o.likes})) const newComments = [...a,...b] const newLikes = [...c,...d] const returnFlattenObject = (arr) => { const flatObject = {}; for(let i=0; i<arr.length; i++){ for(const property in arr[i]){ flatObject[`${property}_${i}`] = arr[i][property]; } }; return flatObject; } posts.map(({comments,likes, ...o}) => ({ ...o, comments: returnFlattenObject(newComments), likes: returnFlattenObject(newLikes) })) } else { console.log('exists') }resultado
[{…}] 0: comments: 0_0: {id: 332233, message: 'rasdasdasd'} 0_1: {id: 3322222233, message: 'random comment'} 1_0: {id: 2344444, message: 'asdasdasdwwwwww'} 1_1: {id: 2344444, message: 'another random comment'} [[Prototype]]: Object likes: 0_0: {id: 111221, user: 'random 1'} 0_1: {id: 111222221, user: 'random 1'} 1_0: {id: 2223422, user: 'random 2'} 1_1: {id: 2223422, user: 'random 2'} [[Prototype]]: Object message: "this is post one" _id: 1 [[Prototype]]: Object length: 1 [[Prototype]]: Array(0)