[英]Pushing elements to a nested object in Javascript (Socket.io)
我对这个越来越疯狂。 我是 Javascript 的新手,我已经在二维 arrays 中使用 PHP 做到了这一点,但我已经没有 JS 的选项了。
我正在尝试开始使用 Socket.io,并且我想创建一个 object(或数组)来处理其上的房间和用户。
例如,我想这样管理它:
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]: [] };
但我之前找不到初始化数组的方法。
我感谢您的帮助,
谢谢你。
嗨,我想不是像你说的那样重置房间,而是检查它是否在那里?
rooms = {};
const addUser = ({ id, name, room, img }) => {
const user = { id, name, img, room };
if (!rooms.hasOwnProperty(room)) {
rooms[room] = [];
}
rooms[room].push(user);
console.log(rooms);
};
将您的 addUser function 更改为此并尝试一下?
编辑:不要在 nodejs 中创建对 object 的不必要的指针/引用。 它消耗更多 memory 所以我相信你可以删除user
变量并直接推送它:
rooms = {};
const addUser = ({ id, name, room, img }) => {
// const user = { id, name, img, room };
if (!rooms.hasOwnProperty(room)) {
rooms[room] = [];
}
rooms[room].push({ id, name, img, room });
console.log(rooms);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.