poldeeek
poldeeek

Reputation: 333

replace object in array with different object

I have two arrays. For example something like this:

"results": [
        {
            "seen": false,
            "_id": "5f6a9608c248df5c14a6aa53",
            "user_id": "5f69264fe410854be4840e9f",
            "invited_user_id": "5f69254ee410854be4840e99",
            "createdAt": "2020-09-23T00:25:44.314Z",
            "__v": 0
        },
        {
            "seen": false,
            "_id": "5f6a943d8d745b422cd67796",
            "user_id": "5f69264fe410854be4840e9f",
            "invited_user_id": "5f69254ee410854be4840e99",
            "createdAt": "2020-09-23T00:18:05.634Z",
            "__v": 0
        }
    ],
    "users": [
        {
            "_id": "5f69254ee410854be4840e99",
            "name": "Paweł",
            "surname": "mnv"
        },
    {
             "_id": "5f692626e410854be4840e9c",
        "name": "Sebastian",
        "surname": "fasd"
        }
    
  ]

and now I would like to replace the "invited_user_id" form results array with user object from users array when results.invited_user_id === users._id.

What I want to get :

"results": [
            {
                "seen": false,
                "_id": "5f6a9608c248df5c14a6aa53",
                "user_id": "5f69264fe410854be4840e9f",
                "invited_user_id": {
                    "_id": "5f69254ee410854be4840e99",
                    "name": "Paweł",
                    "surname": "mnv"
                 },
                "createdAt": "2020-09-23T00:25:44.314Z",
                "__v": 0
            },
            {
                "seen": false,
                "_id": "5f6a943d8d745b422cd67796",
                "user_id": "5f69264fe410854be4840e9f",
                "invited_user_id": {
                     "_id": "5f692626e410854be4840e9c",
                     "name": "Sebastian",
                     "surname": "fasd"
                },
                "createdAt": "2020-09-23T00:18:05.634Z",
                "__v": 0
            }
        ]

I could write some long function which would do that, but I am wonder if there is any faster way to do this ?

Upvotes: 0

Views: 56

Answers (1)

Derek Menénedez
Derek Menénedez

Reputation: 2367

Yeah....

let data = // here put your JSON 
let results = []

data['results'].forEach(result =>{
  data['users'].forEach(user => {
    if(result.invited_user_id === user._id){
      result.invited_user_id = user
      results.push(result)
    }
  })
})

let finalData = {
  'results': results
}

console.log(finalData)

Now finalData have the JSON do you want.

Upvotes: 1

Related Questions