Данные JSON частично не могут быть изменены

#javascript #json

#javascript #json

Вопрос:

Я застрял с этим небольшим фрагментом кода, который не должен быть сложным, этот небольшой фрагмент данных JSON не может быть изменен в отличие от всего остального.

Исходные данные JSON: apptData.push({ ‘service’: ServiceName, ‘duration’: rawDuration, ‘tech’: selectedTech })

Я хотел объединить их в: finalApptData в findTimeSlots()

Небольшая часть данных, которую я хочу изменить, это: 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);
    });
}
  

Комментарии:

1. Какую «небольшую часть данных JSON» нельзя изменить? Откуда вы знаете? Сообщается ли об ошибках? Что -нибудь происходит?

2. Все эти строки, изменяющие finalApptData [j].service, являются результатом нескольких попыток. Должно быть, я сделал что-то не так, но я не уверен, где.

3. мы понятия не имеем, как выглядит ваш json

4. Ваш console.log() оператор находится перед операторами, которые пытаются изменить значение.

5. @Pointy Это был не тот, который я использовал, чтобы проверить, изменилось ли это. Я использую 2-й, который console.log(finalApptData); вне цикла я просто помещаю его туда, чтобы посмотреть, работает ли он. Он показывает данные, но любая попытка изменить их после этого не сработает.

Ответ №1:

Проблема в том, что 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("");  

Комментарии:

1. Когда я пытаюсь использовать этот код с addApptData («A», 1, «X»); addApptData («V», 2, «AC»); addApptData («V3», 32, «AC»); addApptData («Va3», 322, «AxC»); Я получаю сообщение об ошибке, что push не является функцией.