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 に答える