首页 > 解决方案 > 如何根据关系在一个数组中创建多个数组?

问题描述

我正在制作一个短信功能,我希望每个数组都有相同的收件人。例如,我想要一个看起来像这样的数组。

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,
]]

]...但是,当我使用我的函数时,数据不会填充。它只适用于第一组,然后忽略其他所有内容。


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

};

标签: javascriptarraysreactjsalgorithmfunction

解决方案


您也许可以使用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);
}


推荐阅读