1

我有以下代码,它不起作用。

var conversations = { };
conversations['5634576'].name = 'frank';

显然我不能在对象内创建对象。我想使用会话对象来存储对象数组,以使用 localStorage 在客户端保存消息历史记录,以节省服务器端的空间。

但显然,我什至不能在对象内部创建变量,除非它们已经存在,如下所示:

var conversations = { 123: { name: 'test' } };
conversations[123].name = "frank";

但是,由于我不知道将使用的 ID,我不知道如何解决这个问题。

有任何想法吗?

4

4 回答 4

3

你需要这样做:

// Create an object
var conversations = {};

// Add a blank object to the object if doesn't already exist
if (!conversations.hasOwnProperty('5634576')) {
    conversations['5634576'] = {};
}

// Add data to the child object
conversations['5634576'].name = 'frank';

该对象将如下所示:

conversations{
    '5634576': {
        name : 'frank'
    }
}

更新

您可以使用检查元素是否存在in

if('5634576' in conversations) {
    // Exist
}
于 2013-02-23T17:52:29.207 回答
0

在您的代码中,您不能将变量添加到索引“5634576”,因为它仍然不存在。

var conversations = { };
conversations['5634576'].name = 'frank';

您需要创建它,然后分配变量

var conversations = { };
conversations['5634576'] = {};
conversations.name = 'frank';
于 2013-02-23T17:54:26.927 回答
0

也许是最短的方法:

var conversations = {};
(conversations['5634576'] = {}).name = 'frank';
于 2013-02-23T17:54:38.200 回答
0
// build this how you were
conversations = {};

// if conversations[12345] is defined, use it:
// else set it to an object with the desired properties/methods
conversations["12345"] = conversations["12345"] || { name : "Frank", messages : [] };
conversations["12345"].messages.push(new_msg);

我假设您将在 XHR 或其他函数中执行此操作

conversations.add_message = function (msg) {
    var id = msg.conversation_id;
    conversations[id] = conversations[id] ||
                        conversations.new_conversation(msg.user_name); // returning a conversation object
    conversations[id].messages.push(msg);
};


conversations.new_conversation = function (name) {
    return { name : name, messages : [], etc : {} };
};
于 2013-02-23T17:58:14.873 回答