2017-09-21 1 views
0

Je souhaite ajouter des données dans un objet et mon objet contient des données imbriquées. données Exemple:Fonction d'affectation conditionnelle de données de membre variable à un tableau imbriqué dans un objet?

pageviewEvent { 
    client: "clientName", 
    page { 
    document_referrer: 'some http refer header data goes here', 
    window_height: 1920, 
    window_width: 1200 
    } 
} 

Certaines données sont non définies ou nulle et je ne veux pas ajouter ces données non définies/null dans l'objet.

J'ai fait une fonction qui fonctionne pour ajouter des données à l'objet conditionnellement (si non indéfini) mais je ne peux pas comprendre comment ajouter des données aux objets imbriqués dans la fonction?

Je pourrais simplement faire un tas d'instructions if, mais je pense qu'il vaut mieux mettre le test de condition dans une fonction pour réduire la taille du code.

code Exemple avec un commentaire montrant la pensée de ce que je suis en train, mais ne fonctionne pas:

//function to check if variable undefined or null, if not -> add to pageviewEvent arrayKey, variableName 
function isUndefinedNull(arrayKey, variableName) { 

    var evalVariableName = eval(variableName); 

    if (evalVariableName !== undefined && evalVariableName !== null && evalVariableName !== "") { 
     console.log(arrayKey); 
     console.log(variableName); 
     pageviewEvent[arrayKey] = evalVariableName; 
     //array key could be nested, for instance pageview[page][title] or pageview.page.tile 
    } 
} 

//make event array 
const pageviewEvent = { } 

//add static data 
pageviewEvent.client = 'neguse'; 

//if not null or undefined add data 
isUndefinedNull('referrer.full', 'document.referrer'); 
//want to put data into object pageviewEvent.referrer.full or pageviewEvent[referrer][full] 

Merci pour toute aide. I feel like this answer can help but I can't figure it out.

+1

Pourquoi passez-vous un nom de variable et «l'évaluez-vous? Vous ne pouvez pas simplement transmettre la valeur directement? – glennsl

+1

C'est un bon point de vue - en général, je n'utiliserais jamais 'eval()' en javascript à moins que je n'ai pas d'autre alternative. C'est très dangereux, il est difficile de filtrer votre code, et il est généralement interdit dans les directives javascript. –

+0

@glennsl J'essayais d'économiser de l'espace, plus de 50 lignes à ajouter dans l'objet. var a = some.html/dom.value; plusieurs fois. –

Répondre

1

Je recommande d'utiliser la fonction lodash _.set(), la documentation se trouvent ici: https://lodash.com/docs/4.17.4#set

_.set(pageviewEvent, "referrer.full", "some-value"); 

Si vous voulez personnaliser le comportement de la façon dont l'imbrication est manipulé quand il y a une valeur non définie, vous pouvez utiliser à la place _.setWith() - Voir https://lodash.com/docs/4.17.4#setWith