如何在 Javascript 中将项目添加到空数组

How to add items to an empty array in Javascript

本文关键字:添加 数组 项目 Javascript      更新时间:2023-09-26

Controller 为一个帧发送一个 JSON。我需要继续增加添加多帧分数的数组。例如

帧分数 = f1 + f2 +.. lastF

问题 不会添加值,仅显示每个帧的数据。我哪里做错了?

var bowlingData = {
    "frames": []
};
var frames = [];
$('#submitButton').click(function(e) {
    frames.push([$("#FirstRoll").val(), $("#SecondRoll").val()]);
    for (var ln = 0; ln < frames.length; ln++) {
        var temp = {
            "firstroll": $("#FirstRoll").val(),
            "secondroll": $("#SecondRoll").val()
        };
        bowlingData.frames.push(temp);
    }
    console.log("temp data: " + temp);
    bowlingData.frames.push(temp);
    var element = this;
    $.ajax({
        url: "/Home/Submit",
        type: "POST",
        data: JSON.stringify(bowlingData),
        dataType: "json",
        traditional: true,
        contentType: "application/json; charset=utf-8",
        success: function(data) {
            var parseData = JSON.parse(data);
            console.log("MyDate: " + data.score);
            console.log("Parse" + parseData);
            $("#lblTotalScore").text(parseData.score);
            $("#FirstRoll").val("");
            $("#SecondRoll").val("");
        },
        error: function() {
            alert("An error has occured!!!");
        }
    });
});

显然解决方案是

var frameArray= [];
frameArray.push("#FirstRoll");
frameArray.push("#SecondRoll");

但那是将单个元素添加到数组中。如果输入是 [[2, 3],[4, 5],...],则JSON对象表示为

{ "frames": [{"first": 2, "second": 3}, {"first": 4, "second": 5}, ... ] } 

但是,还有一个问题,即无法从控制器获得正确的响应。

这里的问题是创建了一个空数组(即帧),并且在第 3 行将值固定到空Array。尽管 for 循环将每个元素添加到Array(即帧),但是当创建响应时,最近的输入正在替换以前的输入,因为JSON对象 bowlingData 仅保存临时数据。因此,无需创建任何Array来递增多个输入结果。初始值将由浏览器保留,第二个输入将在下次提交时添加。

var frames = [];
$('#submitButton').click(function(e) {
frames.push([$("#FirstRoll").val(), $("#SecondRoll").val()]);
for (var ln = 0; ln < frames.length; ln++) {
    var temp = {
        "firstroll": $("#FirstRoll").val(),
        "secondroll": $("#SecondRoll").val()
    };
    bowlingData.frames.push(temp);
}

应该是

$('#submitButton').click(function (e) {
bowlingData.frames.push({
   "firstroll": $("#FirstRoll").val(),
   "secondroll": $("#SecondRoll").val()
});