首页 > 解决方案 > JSON 数据部分无法更改

问题描述

我被这段不应该很复杂的一小段代码所困扰,这一小段 JSON 数据无法像其他所有内容一样更改。

原始 JSON 数据: apptData.push({ 'service': serviceName, 'duration': rawDuration, 'tech' : selectedTech })

我想将其合并为:findTimeSlots ()中的finalApptData

我要更改的一小部分数据是:finalApptDatap[j].service以保存更多信息,但使用 console.log() 查看时不会更改

我使用console.log(finalApptData); 在所有检查结束时。

var apptData = [];
function addApptData(serviceName, rawDuration, selectedTech){
    apptData.push({
        'service': serviceName,
        'duration': rawDuration,
        'tech' : selectedTech
    })
}
function reduceApptData(index){
    apptData.splice(index, 1);
}
function findTimeSlots(dateStr){
    var finalApptData = [];
    for(var i = 0; i < apptData.length; i++){
        var duplicated = false;
        for(var j = 0; j < finalApptData.length; j++){
            if(finalApptData[j].tech == apptData[i].tech){

//All those line changing finalApptData[j].service are from multiple attempts. 
// I must have done something wrong but I'm not sure where.

                    **finalApptData[j].service = "changed";
                    finalApptData[j].service.push("apptData[i].service");
                    finalApptData[j].service.push(apptData[i].service);
                    finalApptData[j].service += apptData[i].service;
                    finalApptData[j].service += ", "+apptData[i].service;**

                finalApptData[j].duration += apptData[i].duration;
                duplicated = true;
            }
        }
        if(!duplicated){
            finalApptData.push(apptData[i]);
        }
    }
    console.log(finalApptData);
    $.post('./getTimeSlots.php', {'date': dateStr}, function(response){
        console.log("Response: "+response);
    });
}

标签: javascriptjson

解决方案


问题是 apptData 是一个对象而不是数组,因此像数组一样附加到对象是行不通的。相反,我创建了一个数组并将其推送到该数组。

var apptData = [];
function addApptData(serviceName, rawDuration, selectedTech){
    apptData.push({
        'service': serviceName,
        'duration': rawDuration,
        'tech' : selectedTech
    })
}
function reduceApptData(index){
    apptData.splice(index, 1);
}
function findTimeSlots(dateStr){
    var finalApptData = [];
    for(var i = 0; i < apptData.length; i++){
        var duplicated = false;
        for(var j = 0; j < finalApptData.length; j++){
            if(finalApptData[j].tech == apptData[i].tech){
                let obj = [apptData[i].service];
                obj.push(finalApptData[j].service);
                finalApptData[j].service = obj;
                finalApptData[j].duration += apptData[i].duration;
                duplicated = true;
            }
        }
        if(!duplicated){
            finalApptData.push(apptData[i]);
        }
    }
    console.log(finalApptData);
}

addApptData("A", 1, "X");
addApptData("V", 2, "C");
addApptData("V3", 32, "C");
addApptData("Va3", 322, "AxC");

findTimeSlots("");


推荐阅读