3 votes

Valeur des objets à l'intérieur des objets qui donnent un résultat indéfini

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': {(...)}
        }
}
*/

0voto

Chayan Points 552
var customMap ={
     totalValues:{
         total:10000
     },
     carPrices:{
         'CAR1':{date1:'price1'},
         'CAR2':{date2:'price2'}
     }
};

console.log(customMap.totalValues.total);

console.log(customMap.carPrices.CAR1);

console.log(customMap.carPrices.CAR2);

0voto

J.Lindebro Points 183

Votre objet est cassé.

var customMap ={
 totalValues:{
     total:10000
 }, // here you are missing a comma.
 carPrices:{
     'CAR1':{date1:price1} // Is this value filled by the variable price1? If not is broken and should be 'price1'.
     'CAR2':{date2:price2} // Is this value filled by the variable price2? If not is broken and should be 'price2'.
 }
}

0voto

Le problème peut venir du fait que vous avez oublié de séparer les valeurs dans le fichier customMap et l'objet carPrices avec des virgules.

Voici un exemple concret de ce que vous avez essayé.

var customMap = {
     totalValues:{
         total:10000
     },
     carPrices:{
         'CAR1':{'date1':'price1'},
         'CAR2':{'date2':'price2'}
     }
}

for (var i in customMap.totalValues){
    console.log('property:', i);
    console.log('value:', customMap.totalValues[i]);

}
/*
property: total
value: 10000
*/

console.log(customMap.totalValues["total"]);//10000
console.log(customMap.totalValues.total);//10000

console.log(customMap.totalValues);

console.log(Object.values(customMap.totalValues));
console.log(Object.keys(customMap.totalValues));
console.log(Object.entries(customMap.totalValues));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X