Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

215
Vistas
Insert nested arrays if nested array does not exist

I'm trying to insert new data if the does not exist in the nested array, so far I'm able to add if they don't exist, but it's removing the previous data, any help would be appreciated.

Arrays

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'  } 
  ] 

expected output

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' } 
    ] 
  }] 

what I've tried

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)
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Perhaps I'm too tired, but I would just merge the arrays together. Your post didn't mention that you needed to check whether the comments in the variable comments already could exist in posts[0].comments (_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)

about 4 years ago · Juan Pablo Isaza Denunciar

0

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')
}

result

[{…}]
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)
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda