我必须能够在AngularJS(javascript)上总结这个JSON JSONLINK的课程价格
我必须两笔钱,一个用于学校,另一个用于所有学校。我已经在桌面上打印了所有数据,但我不确定如何制作javascript函数
答案 0 :(得分:1)
我认为这会让你开始
// get numeric value and separate it by ','
var num = coursePrice.split('$')[1].split(",");
// concatenate numeric string
num = num[0] + num[1];
// turn it into a float
num = parseFloat(num);
下次不要指望别人做你的工作:
var sum = 0;
data.forEach(function(d) {
d.professor.forEach(function(p) {
var num = p.coursePrice.split('$')[1].split(",");
// concatenate numeric string
num = num[0] + num[1];
// turn it into a float
num = parseFloat(num);
allSum += num;
});
});
这将适用于所有学校,对于个别学校,您可以使用jQuery $ .grep函数完成此任务。
对于没有$ .grep和jQuery的个别学校:
var schools = [];
var schoolsSum = [];
data.forEach(function(d) {
if(schools.indexOf(d.school) == -1) {
schools.push(d.school);
schoolsSum.push(0);
}
var schoolIndex = schools.indexOf(d.school);
d.professor.forEach(function(p) {
var num = p.coursePrice.split('$')[1].split(",");
// concatenate numeric string
num = num[0] + num[1];
// turn it into a float
num = parseFloat(num);
allSum += num;
schoolsSum[schoolIndex] += num;
});
});
在此之后你应该有两个数组,其中一个包含学校名称,一个是schols课程价格总和。您可以轻松地创建这两个对象:
var schoolsObj = new Object();
var index = 0;
schools.forEach(function(s) {
schoolsObj[s] = schoolsSum[index];
index += 1;
});
答案 1 :(得分:0)
此处要解决的第一个问题是将coursePrice
解析为数字,为此您可以使用String.prototype.replace()
然后将其更改为数字。
<强> DEMO 强>
类似的东西:
+coursePrice.replace(/[^0-9\.]+/g,"");
其中+
符号将替换后的字符串更改为数字。
现在让我们回到您要创建的两个函数,首先让我们创建一个具有函数getSchoolCoursePrice()
和getTotalSchoolCoursePrice()
的服务。
服务
.service('SchoolService', function() {
this.getSchoolCoursePrice = function(school) {
return school.professor.reduce(function(value, professor) {
return value + +professor.coursePrice.replace(/[^0-9\.]+/g,"");
}, 0.00);
};
this.getTotalSchoolCoursePrice = function(schools) {
return schools.reduce(function(value, school) {
return value + school.totalCoursePrice;
}, 0.00);
};
})
SchoolService.getSchoolCoursePrice()
获取学校的总课程价格,因为您已注意到该函数接受了一个学校的参数。
SchoolService.getTotalSchoolCoursePrice()
接受一系列学校的参数,这些参数获得每所学校的totalCoursePrice
。在迭代每所学校时分配此totalCoursePrice
,然后使用SchoolService.getSchoolCoursePrice()
为其分配此属性。
控制器的
.controller('SchoolController', function($scope, $http, SchoolService) {
$http.get('schools.json').success(function(schools) {
$scope.schools = schools.map(function(school) {
school.totalCoursePrice = SchoolService.getSchoolCoursePrice(school);
return school;
});
$scope.totalPrice = SchoolService.getTotalSchoolCoursePrice(schools);
});
});
您可以看到控制器,获取学校列表,然后在每所学校附加totalCoursePrice
财产。
HTML 的
<table>
<tr>
<td>School</td>
<td>Total Course Price</td>
</tr>
<tr ng-show="!schools">
<td colspan="2">Loading...</td>
</tr>
<tr ng-repeat="school in schools track by $index">
<td ng-bind="school.school"></td>
<td ng-bind="school.totalCoursePrice"></td>
</tr>
<tr ng-show="schools">
<td>Total Price</td>
<td ng-bind="totalPrice"></td>
</tr>
</table>