最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

node.js - Javascript create object with data structure like this - Stack Overflow

programmeradmin3浏览0评论

I would like to create an object with a similar data structure if possible. Must I create a new object for every player? Could somebody tell me how?

players
players.name='John'

players.John.age='12'
players.John.adress='London ..'
players.John.telnumber='09876587655'

edit1

Sorry I know this is the basic. I just ask one more question an them i will try learn better javascript. I need to pass data stored in "event" to object."event".id (to be like players.John.id instead players.event.id) Sorry for my bad english.

// in app.js
var fs = require('fs');
var socketio = require('socket.io');
Tail = require('tail').Tail;
var express = require('express');
var http = require('http');
var colors = require('colors');
var app = express()
  , server = require('http').createServer(app)
  , io = socketio.listen(server);             // socket needs to listen on http server

server.listen(9099);



app.use(express.static(__dirname + '/public'));

var port = process.env.PORT || 3000;

app.listen(port, function() {
    console.log('\r\n');
    console.log("Express listening on port " + port +'.'.green);
});

// Routing
//app.use(express.static(__dirname));

// usernames which are currently connected to the chat
//var players = [];
var players = {};


io.sockets.on('connection', function(socket) {
    // do all of your socket work in here
    console.log('\r\n');
    console.log("Connection".green);

    var sessionid = socket.id;
    console.log(sessionid);

    // Success!  Now listen to messages to be received
    socket.on('message',function(event){ 
        console.log('Received message:',event);
    });

    socket.on('add user',function(event){ 
        console.log('New User:',event);
        // we store the username in the socket session for this client

        socket.username = event;
        // add the client's username to the global list
        players.event = {};
        players.event.id = sessionid;
        //players.John.foo = "yeah"
        //players.John.name = "John"
        console.log(players);

        socket.emit('login', {});
        // echo globally (all clients) that a person has connected

        socket.broadcast.emit('user joined', {
            username: socket.username
        });
    });

    //socket.emit('start', 'newround');     
});

edit2

Got it working.

// in app.js
var fs = require('fs');
var socketio = require('socket.io');
Tail = require('tail').Tail;
var express = require('express');
var http = require('http');
var colors = require('colors');
var app = express()
  , server = require('http').createServer(app)
  , io = socketio.listen(server);             // socket needs to listen on http server

server.listen(9099);

app.use(express.static(__dirname + '/public'));

var port = process.env.PORT || 3000;

app.listen(port, function() {
    console.log('\r\n');
    console.log("Express listening on port " + port +'.'.green);
});

// Routing
//app.use(express.static(__dirname));

// usernames which are currently connected to the chat
//var players = [];
var players = {};

io.sockets.on('connection', function(socket) {
    // do all of your socket work in here
    console.log('\r\n');
    console.log("Connection".green);
    var sessionid = socket.id;
    console.log(sessionid);

    // Success!  Now listen to messages to be received
    socket.on('message',function(event){ 
        console.log('Received message:',event);
    });

    socket.on('add user',function(event){ 
        console.log('New User:',event);
        // we store the username in the socket session for this client

        socket.username = event;
        // add the client's username to the global list
        players[event] = {};
        players[event].id = sessionid;
        //players.John.foo = "yeah"
        //players.John.name = "John"
        console.log(players);

        socket.emit('login', {});

        // echo globally (all clients) that a person has connected
        socket.broadcast.emit('user joined', {
            username: socket.username
        });
    });

    //socket.emit('start', 'newround');
});

I would like to create an object with a similar data structure if possible. Must I create a new object for every player? Could somebody tell me how?

players
players.name='John'

players.John.age='12'
players.John.adress='London ..'
players.John.telnumber='09876587655'

edit1

Sorry I know this is the basic. I just ask one more question an them i will try learn better javascript. I need to pass data stored in "event" to object."event".id (to be like players.John.id instead players.event.id) Sorry for my bad english.

// in app.js
var fs = require('fs');
var socketio = require('socket.io');
Tail = require('tail').Tail;
var express = require('express');
var http = require('http');
var colors = require('colors');
var app = express()
  , server = require('http').createServer(app)
  , io = socketio.listen(server);             // socket needs to listen on http server

server.listen(9099);



app.use(express.static(__dirname + '/public'));

var port = process.env.PORT || 3000;

app.listen(port, function() {
    console.log('\r\n');
    console.log("Express listening on port " + port +'.'.green);
});

// Routing
//app.use(express.static(__dirname));

// usernames which are currently connected to the chat
//var players = [];
var players = {};


io.sockets.on('connection', function(socket) {
    // do all of your socket work in here
    console.log('\r\n');
    console.log("Connection".green);

    var sessionid = socket.id;
    console.log(sessionid);

    // Success!  Now listen to messages to be received
    socket.on('message',function(event){ 
        console.log('Received message:',event);
    });

    socket.on('add user',function(event){ 
        console.log('New User:',event);
        // we store the username in the socket session for this client

        socket.username = event;
        // add the client's username to the global list
        players.event = {};
        players.event.id = sessionid;
        //players.John.foo = "yeah"
        //players.John.name = "John"
        console.log(players);

        socket.emit('login', {});
        // echo globally (all clients) that a person has connected

        socket.broadcast.emit('user joined', {
            username: socket.username
        });
    });

    //socket.emit('start', 'newround');     
});

edit2

Got it working.

// in app.js
var fs = require('fs');
var socketio = require('socket.io');
Tail = require('tail').Tail;
var express = require('express');
var http = require('http');
var colors = require('colors');
var app = express()
  , server = require('http').createServer(app)
  , io = socketio.listen(server);             // socket needs to listen on http server

server.listen(9099);

app.use(express.static(__dirname + '/public'));

var port = process.env.PORT || 3000;

app.listen(port, function() {
    console.log('\r\n');
    console.log("Express listening on port " + port +'.'.green);
});

// Routing
//app.use(express.static(__dirname));

// usernames which are currently connected to the chat
//var players = [];
var players = {};

io.sockets.on('connection', function(socket) {
    // do all of your socket work in here
    console.log('\r\n');
    console.log("Connection".green);
    var sessionid = socket.id;
    console.log(sessionid);

    // Success!  Now listen to messages to be received
    socket.on('message',function(event){ 
        console.log('Received message:',event);
    });

    socket.on('add user',function(event){ 
        console.log('New User:',event);
        // we store the username in the socket session for this client

        socket.username = event;
        // add the client's username to the global list
        players[event] = {};
        players[event].id = sessionid;
        //players.John.foo = "yeah"
        //players.John.name = "John"
        console.log(players);

        socket.emit('login', {});

        // echo globally (all clients) that a person has connected
        socket.broadcast.emit('user joined', {
            username: socket.username
        });
    });

    //socket.emit('start', 'newround');
});
Share Improve this question edited Jun 17, 2014 at 21:26 JanS 2,0753 gold badges29 silver badges30 bronze badges asked Jun 17, 2014 at 18:44 genesix.eugenesix.eu 791 silver badge10 bronze badges 2
  • Depending on visibility requirements you might want to have the first line as var players;, otherwise you have a valid JS code that creates a single object and initializes its properties. – PM 77-1 Commented Jun 17, 2014 at 18:48
  • Possible duplicate? stackoverflow./questions/1114024/… – bloodyKnuckles Commented Jun 17, 2014 at 18:54
Add a ment  | 

2 Answers 2

Reset to default 5

You're looking for a players object, with individual players referenced by name. So:

var players = {};
players['John'] = {  
  'age' = 12,
  'address' = 'London...',
  'telnumber' = '09876587655'
};

You can also access "John" as players.John, but that gets tricky if any of the names contain spaces, etc.

Similarly, the player attributes can be accessed either via:

players.John['age'] = 13;   

or

players.John.age = 13;
var name = "John";
var players = {};
players[name] = {};
players[name].age = '12';
players[name].address = "address";
players[name].telnumber = "tel";
发布评论

评论列表(0)

  1. 暂无评论