我的对象:
service: {
categories: [0: {
name: "category1",
id: 2,
questions: [0: {
id: 1,
question: "example trivia question here",
value: 1
}]]
}
基本上,我需要找到声明中存在值的位置并计算它。
$scope.questionCount = 0;
angular.forEach($scope.service, function(categories, questions) {
for (var i = 0; i < questions.length; i++) {
if (questions[i].value !== null){
$scope.questionCount += 1
}
}
});
这是我尝试过的,但是当我在console.log时,我仍然得到0.我没有错误地循环或者没有正确检查该值。任何帮助,赞赏。
答案 0 :(得分:1)
首先,你的数据对象没有多大意义(至少对我来说)。为了提醒我的答案,我假设您的对象看起来像这样:
var categories = [
{
name: "category1",
id: 1,
questions: [
{
id: 1,
question: "example trivia question here",
value: 2
}, {
id: 2,
question: "example trivia question here",
value: 3
}]
},
{
name: "category2",
id: 2,
questions: [
{
id: 3,
question: "example trivia question here",
value: 5
}
]
},
{
name: "category3",
id: 3
}
];
计算此对象中的问题数量可以通过多种方式完成,可以通过循环搜索问题,也可以使用例如像这样的reduce函数:
$scope.questionCount = categories.reduce(function(prev, curr){
return (curr.questions) ? prev.concat(curr.questions) : prev;
}, []).length;
这将从每个类别中提取问题数组,并将它们连接成一个数组。问题总数是此数组的length
,在本例中为3.
您可以在此处详细了解reduce功能:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
如果你想对每个问题'value
属性求和,你可以用更多的map / reduce魔法来填充它,如下所示:
$scope.questionCount = categories
.reduce(function(prev, curr){
return (curr.questions) ? prev.concat(curr.questions) : prev;
}, [])
.map(function(q){
return (q.value)? q.value : 0;
})
.reduce(function(prev, curr){
return prev + curr;
}, 0);
第一个减少与前一个示例完全相同。 map
函数将问题数组转换为仅包含value
属性值的数组,即[2,3,5]。第二个reduce
将这些数字相加。在这种情况下,$scope.questionCount
将是10。
地图功能:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
答案 1 :(得分:0)
坦率地说,代码段中的angular.forEach
循环完全是胡说八道。
Please read it up here。 angular.forEach
用于遍历对象键(例如Array.prototype.forEach
循环遍历数组索引)。
提示:对此的正确解决方案甚至不需要angular.forEach
:您只需使用Array.prototype.forEach
即可。 Please read it up如果你想学习如何使用它。
此外,即使在正常的for循环中,您也应该使用i
作为索引,因为questions
是一个数组,如果要将1添加到变量,请使用++
答案 2 :(得分:0)
该行
$scope.questionCount + 1;
什么都不做。你应该做
$scope.questionCount += 1;
或
$scope.questionCount++;
答案 3 :(得分:0)
您需要存储新值$scope.questionCount += 1
或$scope.questionCount++
;