在nodejs
的控制台日志中。尝试读取对象中的对象但结果不正确。这就是我要做的事情:请耐心等待我阅读。不确定如何正确格式化。
我跑了这个我得到以下结果。
console.log(Object.values(room));
[ 'helloRoom',
'b19b29e4-c61f-4425-927e-4290a3e8b309mw',
{ 'b19b29e4-c61f-4425-927e-4290a3e8b309mw':
WebSocket {
domain: null,
_events: [Object],
_eventsCount: 2,
_maxListeners: undefined,
readyState: 1,
bytesReceived: 0,
extensions: {},
protocol: 'echo-protocol',
_binaryType: 'nodebuffer',
_finalize: [Function],
_finalizeCalled: false,
_closeMessage: null,
_closeTimer: null,
_closeCode: null,
_receiver: [Receiver],
_sender: [Sender],
_socket: [Socket],
_ultron: [Ultron],
protocolVersion: 13,
_maxPayload: 104857600,
_isServer: true,
id: 'b19b29e4-c61f-4425-927e-4290a3e8b309mw',
room: 'b19b29e4-c61f-4425-927e-4290a3e8b309mw',
is_host: true } },
[ 'b19b29e4-c61f-4425-927e-4290a3e8b309mw' ],
'b19b29e4-c61f-4425-927e-4290a3e8b309mw' ]
然后我跑了这个:
for(var s in room){
console.log(s);
}
我得到以下结果:
name
id
sockets
users
host
这样做:
console.log(room.id);
我得到以下内容:
a5c6ac55-89a3-4f06-aace-81179674fdedmw
这样做:console.log(Object.values(room.sockets));我明白了:
[ WebSocket {
domain: null,
_events: { close: [Function], message: [Function: incoming] },
_eventsCount: 2,
_maxListeners: undefined,
readyState: 1,
bytesReceived: 0,
extensions: {},
protocol: 'echo-protocol',
_binaryType: 'nodebuffer',
_finalize: { [Function: bound finalize] __ultron: 1 },
_finalizeCalled: false,
_closeMessage: null,
_closeTimer: null,
_closeCode: null,
_receiver:
Receiver {
_binaryType: 'nodebuffer',
_extensions: {},
_maxPayload: 104857600,
_bufferedBytes: 0,
_buffers: [],
_compressed: false,
_payloadLength: 0,
_fragmented: 0,
_masked: false,
_fin: false,
_mask: null,
_opcode: 0,
_totalPayloadLength: 0,
_messageLength: 0,
_fragments: [],
_cleanupCallback: null,
_hadError: false,
_dead: false,
_loop: false,
onmessage: [Function],
onclose: [Function],
onerror: [Function],
onping: [Function],
onpong: [Function],
_state: 0 },
_sender:
Sender {
_extensions: {},
_socket: [Socket],
_firstFragment: true,
_compress: false,
_bufferedBytes: 0,
_deflating: false,
_queue: [] },
_socket:
Socket {
connecting: false,
_hadError: false,
_handle: [TCP],
_parent: null,
_host: null,
_readableState: [ReadableState],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 7,
_maxListeners: undefined,
_writableState: [WritableState],
writable: true,
allowHalfOpen: false,
_bytesDispatched: 168,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: [Server],
_server: [Server],
_idleTimeout: -1,
_idleNext: null,
_idlePrev: null,
_idleStart: 4337,
_destroyed: false,
parser: null,
on: [Function],
_paused: false,
read: [Function],
_consuming: true,
[Symbol(asyncId)]: 11,
[Symbol(bytesRead)]: 0,
[Symbol(asyncId)]: 13,
[Symbol(triggerAsyncId)]: 8 },
_ultron: Ultron { id: 1, ee: [Socket] },
protocolVersion: 13,
_maxPayload: 104857600,
_isServer: true,
**id: 'a5c6ac55-89a3-4f06-aace-81179674fdedmw',**
room: 'a5c6ac55-89a3-4f06-aace-81179674fdedmw',
is_host: true } ]
我想要的是room.socket.id
我试过了:
console.log(room.sockets.id);
我明白了:
undefined
我试过了:
console.log(Object.values(room.sockets.id));
我明白了:
TypeError: Cannot convert undefined or null to object
我怎么能自己得到room.sockets.id
?
[更新] Sutarmin Anton的评论有效。
“... room.sockets实际上是一个对象。使用
Object.keys(room.sockets)
哪个应该从room.sockets对象的键获取id并返回它们的数组。或者,如果你坚持从每个套接字的id属性获取id,那就行了
Object.values(room.sockets).map(socket => socket.id)“
你需要Object.keys(room.sockets)
,它应该从room.sockets
对象的键中获取id并返回它们的数组。或者,如果你坚持从每个插座的id
属性获取id,请做Object.values(room.sockets).map(socket => socket.id)