2013-02-23 58 views
1

我有下面的代码,这是行不通的。对象编辑的javascript对象

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

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

但很显然,我甚至不能在对象内部创建变量,除非它们已经存在,就像这样:

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

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

任何想法?

+1

'var conversations = {};会话['5634576'] = {};会话['5634576']。name ='frank';',您可以使用if检查第二步是否必要if(!conversations.hasOwnProperty('5634576')){/*..*/} – 2013-02-23 17:51:13

+0

what a麻烦......好吧,谢谢! – 2013-02-23 17:51:50

+0

或'var conversations = {};对话['5634576'] = {名称:'坦率'}'。 *“真是太麻烦了。”*:嗯,你期望什么?您正试图访问属性“5634576”处的值,该值不存在。请阅读[MDN - 使用对象](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects)。 – 2013-02-23 17:52:00

回答

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

检查 ​​3210
+0

数组呢?如果我像这样实例化数组 - >'conversations ['5634576']。messages = [];会话['5634576']。messages.push(消息);'我将失去之前的消息。我能阻止这个吗? – 2013-02-23 17:54:58

+0

'conversations ['5634576'] =对话['5634576'] || {};会话['5634576']。messages = conversations ['5634576']。messages || [];' – 2013-02-23 17:55:30

+0

@john:只有'conversations ['5634576']。messages = [];''.messages'还没有退出。显然,当您分配一个新值时,您将丢失以前的任何值。 – 2013-02-23 17:55:39

0

在您的代码中,您不能将一个变量添加到索引'5634576',因为它不存在。

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

您需要创建它,然后分配valriable

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

也许最短的方式:

var conversations = {}; 
(conversations['5634576'] = {}).name = 'frank'; 
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 : {} }; 
};