Reputation: 167
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
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