从json对象获取总数

时间:2017-11-09 07:19:55

标签: javascript json

我有学生的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

帮助我陷入困境。

3 个答案:

答案 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()调用取得的标记数组,并返回这些值的总和。

<强>演示:

&#13;
&#13;
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;
&#13;
&#13;