【发布时间】:2018-10-26 16:40:02
【问题描述】:
我正在向 Angular 1 应用程序添加一个简单的评论组件。我从服务器获取的对象如下所示:
comments":[
{"id":1,"content":"this is my first comment","approved":1,"replies":[]},
{"id":2,"content":"this is the second","approved":1,"replies":[
{"priority_id":0,"content":"content of a reply","approved":1},
{"priority_id":0,"content":"content of a second reply","approved":1}]
}
]
目前,我在控制器中使用 2 个循环为每个评论分配一个“待定”值,并回复已批准:0
看起来像这样:
angular.forEach($scope.comments, function (comment) {
if (comment.approved === 0) {
comment.pending = true;
}
comment.replies = comment.replies || [];
angular.forEach(comment.replies, function (reply) {
if (reply.approved === 0) {
reply.pending = true;
}
});
});
有没有更好、更短的方法来获得它? Javascript 不完全是我的强项。我真的需要在控制器中循环吗?也许我可以以某种方式传递来自 ng-repeat 的值?提前致谢!
感谢Joe 我知道了一种比循环更好的方法。我已将他的答案标记为解决方案,尽管我必须稍微修改代码才能工作,因为我的应用程序使用与箭头函数不兼容的 angular 1.4。代码如下:
$scope.comments.map(function(comment) {
if (comment.approved === 0) {
comment.pending = true;
}
comment.replies = comment.replies || [];
comment.replies.map(function(reply){
if (reply.approved === 0) {
reply.pending = true;
}
return reply.approved;
});
return comment.approved;
});
它看起来不像 Joe 的那样整洁,但它仍然使用 map 方法,正如 Joe 和 Matthew 所建议的那样,它比循环更好。
【问题讨论】:
标签: javascript arrays angularjs object angularjs-ng-repeat