javascript - 如何根据关系在一个数组中创建多个数组?
问题描述
我正在制作一个短信功能,我希望每个数组都有相同的收件人。例如,我想要一个看起来像这样的数组。
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
};
解决方案
您也许可以使用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);
}
推荐阅读
- python - Optional NoReturn: TypeHint for a function which sometimes raises an exception
- python - 带有udf pyspark的fasttext
- java - 如何用 Java 编写一个程序来查找“00”来检查字符串中的每个字符?
- javascript - 禁用右键单击时如何删除弹出消息?
- python - 如何计算图像数据集中 RGB 值的 3x3 协方差矩阵?
- angular - 量角器:无法在测试中创建新的浏览器实例
- c# - C# + unity中的元胞自动机邻居检查问题
- html - 我对移动设备中的导航栏有疑问
- python-3.x - 如何参数化限制?
- vue.js - VueJS:从复选框中列出选定对象的状态中的项目防止复选框被取消选中