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