在一个对象的Javascript数组中,如果一个特定的数组元素本身就是一个对象数组,我如何通过名称/ID来定位该元素

In a Javascript array of objects, how can I target a specific array element by name/ID if that element is an array of objects itself?

本文关键字:数组 一个对象 何通过 元素 定位 ID 数组元素 如果 Javascript 一个      更新时间:2023-09-26

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

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

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

如果在以后的阶段,我只想通过父对象的名称/ID将对象添加到特定对象的"注释"中,这可能吗?如果是这样的话,我该怎么做呢?

举个例子,如果只有一篇评论有多条评论,而评论是在稍后的阶段出现的,我如何将新评论添加到评论对象中的"评论"数组中?

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

提前谢谢。

首先,注释应该是一个数组,并且您有一个对象。

然后这样进行:

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

如果你需要在第一篇文章中添加评论,请执行:

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

EDIT:我一直使用get()来检索索引,但我似乎找不到太多关于它的文档,所以我假设(尽管我不确定)[I]是一种更标准的做事方式,因此我更改了这个例子。然而,发表评论的概念并没有改变。

EDIT 2:OP希望以数组中的特定元素为目标。我会使用这里描述的Array.prototype.indexOf,在那里你可以找到一个不支持indexOf的浏览器的解决方案。

如果你想跟踪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] = { /* .. */ };
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);
}
}

输出

评论者"Dave"

评论"John的评论太短"

评论者2"另一个评论者"

注释2"其他一些评论"

http://jsfiddle.net/gkxcj/