我有学生的json
"students":{
"ABC":{
"eng": 25,
"maths": 50,
"sci": 25
},
"DEF": {
"eng": 25,
"maths": 48,
"sci": 30
}
}
我想得到每个学生的总分。
以下是我的观点:
var marksCount = [];
$.each(response['students'], function(name, marksVal) {
$.each(marksVal, function(index, val) {
if (marksCount[name] == 'undefined') {
marksCount[name] = 0;
marksCount[name].push(val);
}
});
});
var studName = '', studMarks = 0;
$.each(marksCount, function(i, v)){
studName = i;
studMarks += i;
}
student name total
ABC 100
DEF 103
帮助我陷入困境。
答案 0 :(得分:2)
您不需要使用jQuery来实现这一目标。
// a function to sum up an array of numbers
function sumValues(values) {
return values.reduce(function (sum, value) {
return sum + value;
});
}
var students = {
ABC: {
eng: 25,
maths: 50,
sci: 25
},
DEF: {
eng: 25,
maths: 48,
sci: 30
}
};
// loop through all students in the list
Object.keys(students).forEach(function (studentName) {
// get student details by name
var student = students[studentName];
// get all the grades for the student
var grades = Object.values(student);
// sum them up
var total = sumValues(grades);
console.log("Total for " + studentName + " is " + total);
});

如果没有jQuery,你可以实现很多目标,无论何时使用它,你都应该评估你是否正确使用它。单凭JavaScript总结价值非常简单,所以你应该这样做。
查看You Might Not Need jQuery,了解如何在不使用jQuery的情况下编写所需代码的更多示例。
答案 1 :(得分:0)
var students = {
ABC:{
eng: 25,
maths: 50,
sci: 25
},
DEF: {
eng: 25,
maths: 48,
sci: 30
}};
$.each(students, function(value, course) {
console.log("Student: " + value);
var sum = 0;
$.each(course, function(grade, mark){
sum += mark;
})
console.log("Sum: "+ sum);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
首先,您需要将Json转换为Javascript对象,之后您可以应用以下代码:
var students = {
ABC:{
eng: 25,
maths: 50,
sci: 25
},
DEF: {
eng: 25,
maths: 48,
sci: 30
}};
$.each(students, function(value, course) {
console.log("Student: " + value);
var sum = 0;
$.each(course, function(grade, mark){
sum += mark;
})
console.log("Sum: "+ sum);
});
答案 2 :(得分:0)
首先,它不是JSON对象,there's no such a thing as a "JSON Object",它只是一个Javascript object
。
但要回答你的问题, 我想得到每个学生的总分。 :
您只需使用 Object.keys()
, Object.values()
, Array#map()
和 Array#reduce()
方法。
这应该是你的代码:
var results = Object.keys(data.students).map(function(key) {
let obj = {};
obj[key] = Object.values(data.students[key]).reduce(function(a, b) {
return a + b;
});
return obj;
});
<强>解释强>
以下代码的工作方式如下:
Object.keys(data.students)
从students
对象中获取所有密钥(学生姓名)。.map()
方法遍历这些键,以返回每个迭代键的自定义对象。.map()
循环内,对于每个键,我们使用object
获取Object.values(data.students[key])
相对于此键的所有值(标记值)。.reduce()
方法和Object.values()
调用取得的标记数组,并返回这些值的总和。<强>演示:强>
var data = {
"students": {
"ABC": {
"eng": 25,
"maths": 50,
"sci": 25
},
"DEF": {
"eng": 25,
"maths": 48,
"sci": 30
}
}
};
var results = Object.keys(data.students).map(function(key) {
let obj = {};
obj[key] = Object.values(data.students[key]).reduce(function(a, b) {
return a + b;
});
return obj;
});
console.log(results);
&#13;