这是我的对象
{
"_id": "555ab225ae9c30b57432e1d2",
"firstname": "Mindy",
"lastname": "Martinez",
"subjects": [
{
"name": "Mathematics",
"grades": {
"assignments": 16,
"tests": 4,
"final": 38
}
},{
"name": "English",
"grades": {
"assignments": 10,
"tests": 12,
"final": 35
}
},{
"name": "Chemistry",
"grades": {
"assignments": 19,
"tests": 8,
"final": 3
}
},{
"name": "Physics",
"grades": {
"assignments": 4,
"tests": 26,
"final": 32
}
},{
"name": "Biology",
"grades": {
"assignments": 19,
"tests": 26,
"final": 1
}
},{
"name": "F Maths",
"grades": {
"assignments": 4,
"tests": 6,
"final": 11
}
}
]
}
我需要知道如何将主题名称和成绩总数(作业+考试+最终成绩)分成单独的数组科目(科目名称)和分数(作业测试总数和最终成绩)
var subjects = [];
var scores = [];
for(var x in $scope.data.subjects){
subjects.push(x.name);
}
for(var y in $scope.data.subjects){
scores.push(y.assignments+y.tests+y.final);
}
继承我的代码http://plnkr.co/edit/RXzjPllg0RSWjvgMjIoU?p=preview
我尝试的是// Data //评论。 Dosent似乎工作,因为雷达图表的标签与数据显示未定义相同的东西
答案 0 :(得分:2)
您只需将for loops
替换为angular.forEach
:
angular.forEach($scope.data.subjects, function(x){
subjects.push(x.name);
})
angular.forEach($scope.data.subjects, function(y){
scores.push(y.grades.assignments+y.grades.tests+y.grades.final);
})
或者甚至在这样的angular.forEach
中:
angular.forEach($scope.data.subjects, function(x){
subjects.push(x.name);
scores.push(x.grades.assignments+x.grades.tests+x.grades.final);
})
更新了plunker。请参阅scores
的控制台。
答案 1 :(得分:1)
您需要更改此循环:
for(var x in $scope.data.subjects){
subjects.push(x.name);
}
到此:
$scope.data.subjects.forEach(function(x) {
subjects.push(x.name);
});
在你的例子中,它适用于我。
答案 2 :(得分:1)
你的第一个循环是试图从索引(x)中获取属性'name',这就是你在图表上看到'undefined'的原因。 (索引上的属性'name'未定义。)
我会说Nico在我上面所说的,你不应该在数组中使用'for in'循环,一个简单的for循环就足够了。
与第一个循环相同的问题适用于第二个,索引y没有属性'tests',因此结果是未定义的。另外值得注意的是,您的数据结构没有“测试”作为主题对象的参数,而是主题对象内部的成绩对象,因此要获取您需要使用的数据
subject.grades.tests
获得考试成绩。 (您将使用类似的代码来获取其他分数类型)
此外,您不需要使用两个循环将数据导入两个数组(您的循环完全相同)。
(据我所知)工作代码的样本位如下:
//Data//
var subjects = [];
var scores = [];
var iter;
for(iter = 0; iter < $scope.data.subjects.length; iter = iter + 1)
{
var x = $scope.data.subjects[iter];
subjects.push(x.name);
scores.push(x.grades.tests + x.grades.assignments + x.grades.final);
}
答案 3 :(得分:0)
将subjects.push(x.name);
更改为subjects.push($scope.data.subjects[x].name);
。
你不应该在javascript中使用for in
数组。我建议您使用简单的for
循环。