Je suis novice en JavaScript et j'ai besoin de récupérer des informations stockées de cette manière dans un objet défini globalement.
var customMap ={
totalValues:{
total:10000
}
carPrices:{
'CAR1':{date1:price1}
'CAR2':{date2:price2}
}
}
Il a été alimenté en utilisant une fonction et quand je lance console.log(customMap)
Je peux voir toute la structure de celui-ci parfaitement. Le problème se pose lorsque j'essaie de récupérer des informations spécifiques.
Je reçois toujours un message indéfini.
J'ai essayé avec :
for (var i in customMap.totalValues){
console.log(i);
console.log(customMap.totalValues[i]);
}//It doesn't write anything in the log.
console.log(customMap.totalValues["total"]);//undefined
console.log(customMap.totalValues.total);//undefined
ce que j'ai obtenu, c'est lorsque je l'ai interrogé de cette façon :
console.log(customMap.totalValues);
//{}
//total: 10000
console.log(Object.values(customMap.totalValues));
console.log(Object.keys(customMap.totalValues));
console.log(Object.entries(customMap.totalValues));
Tous donnent le même message de retour :
//[]
//length: 0
La même chose se produit avec carPrices
des objets. Je ne peux pas récupérer les informations pour chaque voiture. Je veux dire CAR1, CAR2...
Je suis à court d'idées. Je ne sais pas si c'est à cause de la façon d'accéder à l'objet qui n'est pas correcte, ou si l'objet n'est pas correctement défini ou simplement parce qu'il est déclaré globalement.
J'apprécierais toutes les idées que vous pourriez avoir.
@ Kirill Matrosov J'ajoute ci-dessous le code pour donner une idée de mon intention. Comme vous pouvez le remarquer, la structure de l'objet est plus grande que la précédente car j'essaie d'être plus précis dans la question. De toute façon, j'ai découvert que JS n'est pas séquentiel et que les callbacks ne m'aident pas du tout :S
var customMap =
{
totalValues:{},
carPrices:{}
}
function addValuesToCustomMap(date,car,value){
if (!customMap.carPrices[car]){
customMap.carPrices[car] = {
dates: {},
carTotalValue:0,
carPercent:0
};
}
if (!customMap.carPrices[car].dates[date]){
customMap.carPrices[car].dates[date] = value;
}
else if (customMap.carPrices[car].dates[date]){
var auxValue = customMap.carPrices[car].dates[date];
customMap.carPrices[car].dates[date] = auxValue + value;
}
var totalValue_byCar = customMap.carPrices[car].catTotalValue;
customMap.carPrices[car].catTotalValue = totalValue_byCar + value;
if(!customMap.totalValues["total"]){
customMap.totalValues["total"]=value;
}
else{
var tot = customMap.totalValues["total"];
customMap.totalValues["total"]=tot+value;
}
}
function calculatePercentagesByCar(){
var tot = customMap.totalValues["total"];
for (var k in Object.keys(customMap.carPrices)){
var totalCarPrice = customMap.carPrices[k].carTotalValue;
var percent = totalCarPrice*100/tot;
customMap.carPrices[k].carPercent = percent;
}
}
/*
customMap={
totalValue:{
total: xxxxxx
}
carPrices:{
'CAR 1': {
dates:{
{date1:value1},
(...)
{dateN:valueN}
}
carTotalValue: yyyyyy,
carPercent: zzzz
}
(...)
'CAR N': {(...)}
}
}
*/