【问题标题】:Javascript create object with data structure like thisJavascript创建具有这样数据结构的对象
【发布时间】:2014-06-17 18:44:18
【问题描述】:

如果可能,我想创建一个具有相似数据结构的对象。 我必须为每个玩家创建一个新对象吗?谁能告诉我怎么做?

players
players.name='John'

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

编辑1

对不起,我知道这是基本的。我只是再问一个问题,我会尝试学习更好的 javascript。我需要将存储在“事件”中的数据传递给对象。“事件”。id(就像 player.John.id 而不是 player.event.id) 对不起我的英语不好。

// 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');     
});

编辑2

搞定了。

// 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');
});

【问题讨论】:

  • 根据可见性要求,您可能希望将第一行设为var players;,否则您有一个有效的 JS 代码来创建单个对象并初始化其属性。

标签: javascript node.js object


【解决方案1】:

您正在寻找一个players 对象,其中包含按名称引用的各个玩家。所以:

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

您也可以使用players.John 访问“John”,但如果任何名称中包含空格等,就会变得很棘手。

同样,玩家属性可以通过以下方式访问:

players.John['age'] = 13;   

players.John.age = 13;

【讨论】:

  • 请记住键必须是唯一的。这种方法只适用于短暂的幸运,直到你有两个名叫约翰的玩家。将玩家分配为这样的对象是没有意义的。使用一个计划旧数组,并且每个数组都有一个name 属性。
  • 除非你想做一些疯狂的事情,比如“按名字查找玩家”。但是,是的,确保名称的唯一性很重要。
  • 通过循环查找玩家名称非常简单。如果这样做效率低下,那么可以实施适当的搜索树或让数据库引擎为您处理它。
【解决方案2】:
var name = "John";
var players = {};
players[name] = {};
players[name].age = '12';
players[name].address = "address";
players[name].telnumber = "tel";

【讨论】:

  • 没问题。我很乐意提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
相关资源
最近更新 更多