4

I have 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 messages object, I need to add a new property named sender by checking the id in the conversation Object and assign it.

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, which works fine. But is there a way to do it in few lines using loadash or vanila javascript?

1
  • You could also use .forEach or even better: .reduce by converting your object into keys. But I wonder if your "sender" property is being loaded async or not. Commented Sep 19, 2017 at 10:06

1 Answer 1

1

You can map your object messages and transform 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's 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);

Sign up to request clarification or add additional context in comments.

12 Comments

i am not using jquery
Where is lodlash?
@faceturn I edited the answer with Object.assign() instead.
@mok I gave it in pure JS, there's no need for lodash.
Ok,now the answer is pure JS and the OP has edited the question.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.