tg marcus
tg marcus

Reputation: 167

How do I make several arrays inside one based on relationships?

I'm making a texting feature and I want each array to have the same recipients. For example, I want an array that looks like this.

var array = [[
users_id : 1,
sender_id : 2,
],
[
users_id : 3,
sender_id : 1,
],
[
users_id : 1,
sender_id : 2,
],
]
to look like this 
var array = [[[
users_id : 1,
sender_id : 2,
],
[
users_id : 2,
sender_id : 1,
]],
[[
users_id : 3,
sender_id : 1,
]]

]... however, the data doesn't populate when I use my function. it simply works on the first set then ignores everything else.


function d() {
  var inboxMessages = []
  var arr = []
  var c 
  var messages = props.messages
  var q = 0 
  for (var q = 0;q <= messages.length - 1; q++ ) {
    if (q === 0){
      if (messages[q].users_id === props.user.id){
      c = messages[q].sender_id
      }
      else{
        c = messages[q].users_id
      }
    }
    inboxMessages.push(messages.filter(e => (
      e.users_id === c || e.sender_id === c
    )))
    messages = messages.filter(e => (
      e.users_id !== c && e.sender_id !== c
    ))
    q = -1 
  }

  return inboxMessages

};

Upvotes: 0

Views: 38

Answers (1)

Anthony
Anthony

Reputation: 6482

You could maybe work with a Map:

const userIdsBySenderId = new Map();

const messages = [
  { sender_id: 1, users_id: 2 },
  { sender_id: 2, users_id: 3 },
  { sender_id: 1, users_id: 4 },
  { sender_id: 1, users_id: 5 },
];

messages.forEach(({ sender_id, users_id }) => {
  if (userIdsBySenderId.has(sender_id)) {
    userIdsBySenderId.get(sender_id).push(users_id);
  } else {
    userIdsBySenderId.set(sender_id, [users_id]);
  }
});

for (const [sender, users] of userIdsBySenderId) {
  console.log(sender, users);
}

Upvotes: 1

Related Questions