Insert object into child array based on id in child object

I have a conversation object as follows:

{
  "buyer": {
    "userId": "eu-central-1:1080fb20-5271-478f-97f0-0223ded70e3c",
    "Name": "John"
  },
  "seller": {
    "userId": "eu-central-1:b3e5afe9-f4d9-4c90-b3ac-7b24a465c996",
    "Name": "Doe"
  },
  "conversationId": "2c418465-1154-4153-850b-4ea504877c36",
  "messages": [{
    "date": "12/23/2013",
    "text": "hi how is it going\n",
    "receiverId": "eu-central-1:b3e5afe9-f4d9-4c90-b3ac-7b24a465c996",
    "senderId": "eu-central-1:1080fb20-5271-478f-97f0-0223ded70e3c"
  }]
}

In the above, I need to replace the message object, I need to add a new property with the name sender, checking the identifier in the conversation object and assigning it.

The output will be:

{
  "buyer": {
    "userId": "eu-central-1:1080fb20-5271-478f-97f0-0223ded70e3c",
    "Name": "John"
  },
  "seller": {
    "userId": "eu-central-1:b3e5afe9-f4d9-4c90-b3ac-7b24a465c996",
    "Name": "Doe"
  },
  "conversationId": "2c418465-1154-4153-850b-4ea504877c36",
  "messages": [{
    "date": "12/23/2013",
    "text": "hi how is it going\n",
    "receiverId": "eu-central-1:b3e5afe9-f4d9-4c90-b3ac-7b24a465c996",
    "senderId": "eu-central-1:1080fb20-5271-478f-97f0-0223ded70e3c",
    "sender": {
      "userId": "eu-central-1:1080fb20-5271-478f-97f0-0223ded70e3c",
      "Name": "John"
    },
    "reciever": {
      "userId": "eu-central-1:b3e5afe9-f4d9-4c90-b3ac-7b24a465c996",
      "Name": "Doe"
    }
  }]
}

I tried with a for loop that works fine. But is there a way to do this on multiple lines using loadash or vanila javascript?

+4
source share
1 answer

You can mapyour object messagesand convert it accordingly:

obj.messages.map(function(m){
    if(m.senderId === obj.buyer.userId){
      m.sender = Object.assign({}, obj.buyer);
      m.receiver = Object.assign({}, obj.seller);
    }else if(m.senderId === obj.seller.userId){
      m.sender = Object.assign({}, obj.seller);
      m.receiver = Object.assign({}, obj.buyer);
    }
    return m;
});

Demo:

Here is a working demo:

var obj = {
  "buyer": {
    "userId": "eu-central-1:1080fb20-5271-478f-97f0-0223ded70e3c",
    "Name": "John"
  },
  "seller": {
    "userId": "eu-central-1:b3e5afe9-f4d9-4c90-b3ac-7b24a465c996",
    "Name": "Doe"
  },
  "conversationId": "2c418465-1154-4153-850b-4ea504877c36",
  "messages": [{
    "date": "12/23/2013",
    "text": "hi how is it going\n",
    "receiverId": "eu-central-1:b3e5afe9-f4d9-4c90-b3ac-7b24a465c996",
    "senderId": "eu-central-1:1080fb20-5271-478f-97f0-0223ded70e3c"
  }]
};

obj.messages.map(function(m){
    if(m.senderId === obj.buyer.userId){
      m.sender = Object.assign({}, obj.buyer);
      m.receiver = Object.assign({}, obj.seller);
    }else if(m.senderId === obj.seller.userId){
      m.sender = Object.assign({}, obj.seller);
      m.receiver = Object.assign({}, obj.buyer);
    }
    return m;
});

console.log(obj);
Run code
+1
source

Source: https://habr.com/ru/post/1685945/


All Articles