如何添加两个键值,并显示在另一个键值dynamic地在json中使用javascript

我有以下的json

var data = { "total": "", "scores": [{ "subject": "maths", "marks": "50" }, { "subject": "science", "marks": "75" }] }; 

现在总数值应该是125,应该自动更新。 另外在分数键中,这些值将会dynamic地显示出来。因此所有的分数都应该自动添加并显示。 那么我怎样才能做到这一点与任何JavaScript。 有人能帮我吗。 谢谢!

预期

 var data = { "total": "125", "scores": [{ "subject": "maths", "marks": "50" }, { "subject": "science", "marks": "75" }] }; 

您可以使用reduce()来计算总数,然后将其分配给data.total

 var data = { "total": "", "scores": [{ "subject": "maths", "marks": "50" }, { "subject": "science", "marks": "75" }] } var total = data.scores.reduce(function(a, b) { return a + parseInt(b.marks); }, 0) data.total = total; console.log(data) 

你可以应用一个getter并减less分数值。

 var data = { get total() { return this.scores.reduce(function (r, a) { return r + +a.marks; }, 0) }, scores: [{ subject: "maths", marks: "50" }, { subject: "science", marks: "75" }] }; console.log(data.total); 

你可以实现你自己的类:

 function Data() { this.scores = []; this.total = 0; this.addScore = function(subject ,marks) { var score = { "subject" : subject ,"marks" : marks }; this.scores.push(score); this.total += marks; } this.stringify = function() { return JSON.stringify(this); } } var data = new Data(); data.addScore("maths",50); console.log( data.stringify() ); data.addScore("science",75); console.log( data.stringify() ); 

输出:

 {"scores":[{"subject":"maths","marks":50}],"total":50} {"scores":[{"subject":"maths","marks":50},{"subject":"science","marks":75}],"total":125} 

您可以使用对象本身或JSONstring。 希望有帮助…

一个简单的for循环就足够了。

 let data = { "total": "", "scores": [{ "subject": "maths", "marks": "50" }, { "subject": "science", "marks": "75" }] }; for (let i in data.scores) data.total = ((parseInt(data.total) || 0) + parseInt(data.scores[i].marks)).toString(); console.log(data) 

这是一个ES 2015解决scheme:

 var result = 0; for (let score of data.scores){ result += parseInt(score.marks); } data.total = result; 

而使用旧的JavaScript也可以达到同样的效果

 result = 0; for(var i = 0; i < data.scores.length; i++) { result += parseInt(data.scores[i].marks); } data.total = result; 

你应该能够将这段代码片段放入你的代码中。 请记住不要for .. in ,因为它已被弃用,因为https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/for_each…in

希望我能帮上忙

编辑:这似乎是一个其他的MDM页面关于..在,这是不声明为弃用。 很抱歉。