#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 не является функцией.