【发布时间】:2020-06-20 15:14:27
【问题描述】:
我对这个越来越疯狂了。我是 Javascript 新手,我已经在二维数组中使用 PHP 做到了这一点,但我的 JS 选项已经用完了。
我正在尝试开始使用 Socket.io,并且我想创建一个对象(或数组)来处理其上的房间和用户。
例如,我想这样管理它:
rooms = {
roomname: [
{
id: id1,
name: "foo",
},
{
id: id2,
name: "bar",
},
],
roomname2: [
{
id: id3,
name: "Juan",
},
{
id: id4,
name: "Pablo",
},
],
};
这是代码的一部分,也是我到目前为止所做的。
//Client side is sending:
socket.emit("join", { name, room, img });
//Server side is getting:
const { addUser } = require("./functions.js");
socket.on("join", ({ name, room, img }, callback) => {
const { error, user } = addUser({
id: socket.id,
name,
room,
img: img,
});
});
//And addUser function is:
rooms = {};
const addUser = ({ id, name, room, img }) => {
const user = { id, name, img, room };
rooms = { ...rooms, [room]: [] };
rooms[room].push(user);
console.log(rooms)
}
当我打开两个客户端并尝试进入两个不同的房间时,我会得到这样的结果:
{
'room123': [
{
id: 'PdKPyzXv64Wt2YPlAAAO',
name: 'jugador76749',
img: '0',
room: 'room123',
}
],
'room999': [
{
id: 'PdKPyzXv64Wt2YPlAAAO',
name: 'jugador4344',
img: '0',
room: '999',
}
]
}
但是,如果我尝试加入同一个房间,我只会得到最后一个用户:
'room999': [
{
id: 'PdKPyzXv64Wt2YPlAAAO',
name: 'jugador4344',
img: '0',
room: '999'
}
]
我知道我每次执行此操作时都会重置阵列:
rooms = { ...rooms, [room]: [] };
但我之前找不到初始化数组的方法。
感谢您的帮助,
谢谢。
【问题讨论】:
标签: javascript arrays object socket.io push