-1

Want to remove duplicates from array
I want to remove one of them. Similarly, when there are multiple duplicate, I only want to keep the first object because i am getting my array as sorted descending by time.

Here is my code:

 chatlist   : [
      {
        "receiver": "Remya",
        "message": "hiiiii",
        "created": "2018-07-09T05:22:28.143Z"
      },
      {
        "sender": "Remya",
        "message": "hi",
        "created": "2018-07-07T10:35:08.919Z"
      },
      {
        "sender": "Mini",
        "message": "hi",
        "created": "2018-07-05T08:42:50.189Z"
      },
      {
        "sender": "Mini",
        "message": "hlo",
        "created": "2018-07-05T05:11:40.331Z"
      },
      {
        "receiver": "Mini",
        "message": "hi",
        "created": "2018-07-05T05:11:34.489Z"
      },
      {
        "receiver": "Maya",
        "message": "hlo",
        "created": "2018-07-04T05:23:35.650Z"
      },
      {
        "sender": "Maya",
        "message": "hi",
        "created": "2018-07-04T05:22:21.723Z"
      },
      {
        "sender": "Mini",
        "message": "hello",
        "created": "2018-07-04T05:20:06.341Z"
      },
      {
        "receiver": "Mini",
        "message": "hi",
        "created": "2018-07-04T05:19:32.964Z"
      }
    ]

I want the output like:

    chatlist   : [
  {
    "receiver": "Remya",
    "message": "hiiiii",
    "created": "2018-07-09T05:22:28.143Z"
  },
{
    "sender": "Mini",
    "message": "hi",
    "created": "2018-07-05T08:42:50.189Z"
  },
{
    "receiver": "Maya",
    "message": "hlo",
    "created": "2018-07-04T05:23:35.650Z"
  }
]

I am trying to execute my chatlist page. so i need to load my recent chats as list.

Thanks in advance

Rincy
  • 23
  • 7
  • There aren't any duplicates in the first array. Can you describe the logic of your grouping? For example, your output doesn't have any with a sender of Remya, yet your unfiltered one does... – Mitch Jul 09 '18 at 06:18
  • You say you only want to keep the first occurrence of each receiver. Does the timestamp matter? –  Jul 09 '18 at 06:32
  • i just remove my username as sender or receiver from my array bacause i just want to display my contacts such as whose are connected by me and whose connects me – Rincy Jul 09 '18 at 07:09
  • now i need to sort by name such as if it is in sender or receiver i want the name only once with recent chat(first chat in my list with the name for each users) – Rincy Jul 09 '18 at 07:11
  • thanks a lot....... it was fixed by your suggestion – Rincy Jul 09 '18 at 08:10

1 Answers1

0

Here is my suggestion.

You iterate through the chatList (data). If you find a new sender or receiver, memorize it in one of the 2 lists (knownSenders, knownReceivers) and then put the chat item into the finalChatList. If a sender or receiver repeats, the chat item will be ignored then, because the filter method returns a list with a length greater than 0.

let knownSenders = [];
let knownReceivers = [];
let finalChatList = [];
const data = JSON.parse(chatList);

data.forEach( element => {
    const sender = element.sender ? element.sender : null;
    const receiver = element.receiver ? element.receiver : null;

    if (sender) {
        if (knownSenders.filter( el => el.sender === sender).length <= 0) {
            // sender yet unknown
            knownSenders.push(sender);
            finalChatList.push(element);
        }
    } else if  (receiver) {
        if (knownReceivers.filter( el => el.receiver === receiver).length <= 0) {
            // receiver yet unknown
            knownReceivers.push(receiver);
            finalChatList.push(element);
        }
    }
});