1

オブジェクトの別の内部配列を含む、オンザフライで作成されたオブジェクトを配列にプッシュする場合、特定のオブジェクトの配列にのみオブジェクトを追加するにはどうすればよいですか。レビューの使用例:

reviews.push({ 'reviewer' : 'John', 
               'review' : 'This movie was the greatest', 
               'comments' : { 'commenter' : 'Dave',
                              'comment' : 'The review by John was too short'} 
             });

「コメント」はオブジェクトの内部配列です。

後の段階で、特定のオブジェクトの「コメント」にのみオブジェクトを追加したい場合、その親の名前/ID は可能ですか? もしそうなら、どうすればそれを行うことができますか?

例を使用すると、複数のコメントを持つレビューが 1 つしかなく、コメントが後の段階で来る場合、レビュー オブジェクト内の 'comments' 配列に新しいコメントを追加するにはどうすればよいですか?

重複などを防ぐためにレビューIDが必要になると思いますが、それはさておき、構文的にそれを行う方法やそれが可能かどうかさえわかりません。

前もって感謝します。

4

3 に答える 3

4

まず、コメントは配列である必要があり、オブジェクトがあります。

次に、次のように進みます。

reviews[someIndex].comments.push( { commenter: 'john', comment: 'hello!!'});

いえ

最初の投稿にコメントを追加する必要がある場合は、次のようにします。

reviews[0].comments.push( { /* your comment */ } );

編集:私は常に get() を使用してインデックスを取得しましたが、それに関する多くのドキュメントを見つけることができないようです.そのため、例を変更した理由です。ただし、コメントにプッシュするという概念は変わりません。

EDIT 2 : OP は、配列内の特定の要素をターゲットにしたいと考えています。ここで説明されているように、私は Array.prototype.indexOf を使用します。ここでは、indexOf もサポートしていないブラウザーの解決策を見つけることができます。

于 2013-08-16T09:20:02.183 に答える
0
for(var i=0;i<reviews.length;i++){
if(reviews[i]["reviewer"]=="John"){
   var count=Object.keys(reviews[i].comments).length/2;
   reviews[i].comments["commenter"+(count+1)]="another commenter";
   reviews[i].comments["comment"+(count+1)]="some other comment";
   console.log(count);
}
}

出力

コメント者「デーブ」

コメント「ジョンのレビューは短すぎた」

commenter2 "別のコメント投稿者"

comment2 "その他のコメント"

http://jsfiddle.net/gkxcj/

于 2013-08-16T09:29:14.757 に答える
0

ID ごとにレビューとコメントを追跡したい場合は、次のようにします。

var reviews = {};
review_id = "#1234";
reviews[review_id] = {
    "reviewer": "John",
    "review": "This movie was the bestest",
    "comments": {
        "#456": {
            "commenter": "HAL 9000",
            "comment": "I'm afraid I can't let you do that Dave"
        }
    }
};

コメントを追加する:

reviews[review_id].comments[comment_id] = { /* .. */ };
于 2013-08-16T09:25:55.243 に答える