1

如果我将动态创建的对象(包括另一个内部对象数组)推送到数组中,我如何才能仅将对象添加到特定对象的数组中。以评论为例:

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

'comments' 是对象的内部数组。

如果在稍后阶段我只想通过其父名称/ID 将对象添加到特定对象的“评论”,这可能吗?如果是这样,我将如何去做?

使用示例,如果只有 1 条评论和多条评论,并且评论在稍后阶段出现,如何将新评论添加到评论对象中的“评论”数组?

我猜我需要有一个评论 ID 来阻止重复等,但除此之外,我什至不确定在语法上如何做到这一点,或者它是否可能。

提前致谢。

4

3 回答 3

4

首先,comments 应该是一个数组,并且你有一个对象。

然后像这样进行:

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

IE

如果您需要在第一篇文章中添加评论,请执行以下操作:

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

编辑:我总是使用 get() 来检索索引,但我似乎无法找到很多关于它的文档,所以我假设(虽然我不确定)[i] 是一种更标准的做事方式事情,因此我改变了这个例子。然而,推入评论的概念并没有改变。

编辑 2:OP 想要定位数组中的特定元素。我将使用此处描述的 Array.prototype.indexOf ,您可以在其中找到不支持 indexOf 的浏览器的解决方案。

于 2013-08-16T09:20:02.183 回答
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 回答
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);
}
}

输出

评论者“戴夫”

评论“约翰的评论太短了”

评论者2“另一位评论者”

评论2“其他评论”

http://jsfiddle.net/gkxcj/

于 2013-08-16T09:29:14.757 回答