2010-12-13 4 views
2

Pourquoi ce retour: tracker.paramsToTrack est indéfiniAide ajouter nouvelle propriété objet littéral

var tracker = {}; 
var paramsToTrack = ['a', 'b', 'c', 'd', 'e']; 
for (p in paramsToTrack) 
{ 
    if(params[paramsToTrack[p]]) 
    { 
     tracker.paramsToTrack[p] = params[paramsToTrack[p]]; 
    } 

} 
console.log(tracker); 

Je vérifie essentiellement params si « a » par « e » sont présents. Si oui, ajoutez à l'objet de suivi comme ceci:

tracker.a = substance

tracker.b = substance

pensées sur ce que je fais mal ici?

Répondre

3
tracker.paramsToTrack[p] 

devrait probablement être

tracker[paramsToTrack[p]] 

En outre, et non que vous avez demandé, vous pouvez éliminer les recherches de réseau redondant:

var tracker = {}; 
var paramsToTrack = ['a', 'b', 'c', 'd', 'e']; 
var paramName; 
for (p in paramsToTrack) 
{ 
    paramName = paramsToTrack[p]; 
    if(params[paramName]) 
    { 
     tracker[paramName] = params[paramName]; 
    } 

} 
console.log(tracker); 

Ou mieux encore, si vous travaillez dans un environnement Javascript moderne:

paramsToTrack.forEach(function (paramName) { 
    if(params[paramName]) 
    { 
     tracker[paramName] = params[paramName]; 
    } 
}); 
+0

ked! Pourquoi la notation par points ne fonctionne-t-elle pas par curiosité? – doremi

+1

La notation par points traite littéralement le nom de la propriété. Vous demandez essentiellement la propriété "paramsToTrack" du tracker. Vraiment ce que vous voulez, c'est que l'expression paramsToTrack [p] soit évaluée, et que le résultat soit traité comme le nom de la propriété. –

+0

@Joshua McGinnis: Les deux notations suivantes sont équivalentes: 'obj ['property']' et 'obj.property'. Vous pouvez utiliser des variables avec la notation précédente uniquement. – jwueller

Questions connexes