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

How to add two key values and display in another keyvalue dynamically in json using javascript

本文关键字:键值 动态显示 json 另一个 javascript 并在 何添加 添加 两个      更新时间:2023-09-26

我有以下json

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

现在在总数中,值应该是125,应该自动更新。同样在scores键中,值也会动态出现。所以所有的标记都应该自动添加并显示在一起。我怎么用javascript来做呢。有人能帮帮我吗?谢谢!

预计

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

您可以使用reduce()计算total,然后将其分配给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并减少分数的值。

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}

可以使用,object本身或JSON字符串。

一个简单的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解决方案:

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

已经不推荐使用了。

希望我能帮上忙

Edit:似乎有一个关于…因为它没有被声明为已弃用。不好意思