对象编辑的javascript对象
我有下面的代码,这是行不通的。对象编辑的javascript对象
var conversations = { };
conversations['5634576'].name = 'frank';
显然我不能在对象内创建对象。我想使用会话对象来存储对象数组,以保留客户端消息的历史记录与localStorage以节省空间服务器端。
但很显然,我甚至不能在对象内部创建变量,除非它们已经存在,就像这样:
var conversations = { 123: { name: 'test' } };
conversations[123].name = "frank";
但是,因为我不知道将要使用的ID,我不知道如何解决这个问题。
任何想法?
你需要做的是这样的:
// 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
数组呢?如果我像这样实例化数组 - >'conversations ['5634576']。messages = [];会话['5634576']。messages.push(消息);'我将失去之前的消息。我能阻止这个吗? – 2013-02-23 17:54:58
'conversations ['5634576'] =对话['5634576'] || {};会话['5634576']。messages = conversations ['5634576']。messages || [];' – 2013-02-23 17:55:30
@john:只有'conversations ['5634576']。messages = [];''.messages'还没有退出。显然,当您分配一个新值时,您将丢失以前的任何值。 – 2013-02-23 17:55:39
在您的代码中,您不能将一个变量添加到索引'5634576',因为它不存在。
var conversations = { };
conversations['5634576'].name = 'frank';
您需要创建它,然后分配valriable
var conversations = { };
conversations['5634576'] = {};
conversations.name = 'frank';
也许最短的方式:
var conversations = {};
(conversations['5634576'] = {}).name = 'frank';
// 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 : {} };
};
'var conversations = {};会话['5634576'] = {};会话['5634576']。name ='frank';',您可以使用if检查第二步是否必要if(!conversations.hasOwnProperty('5634576')){/*..*/} – 2013-02-23 17:51:13
what a麻烦......好吧,谢谢! – 2013-02-23 17:51:50
或'var conversations = {};对话['5634576'] = {名称:'坦率'}'。 *“真是太麻烦了。”*:嗯,你期望什么?您正试图访问属性“5634576”处的值,该值不存在。请阅读[MDN - 使用对象](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects)。 – 2013-02-23 17:52:00