2017-08-22 1 views
1

J'ai la structure de boucle suivante qui itère sur un tableau d'objets refs, fait quelque chose pour chaque objet défini et devrait afficher le nom de l'indéfini objet.JS/Lodash/Nodejs: Impression du nom de la variable répétée dans la boucle lodash foreach

Pour cela, j'ai besoin d'imprimer le nom de l'objet qui a été passé dans l'itérateur.

Y a-t-il un opérateur qui fournit le nom du paramètre passé dans la fonction iteratee?

//couple of objects with some data 
    var a = { .... }; 
    var b = { .... }; 
    //undefined object 
    var c; 
    var d;  
    var e; 
    . 
    . 
    . 
    . 
    var someNthVar; 

_.forEach (
    [a,b,c,d,e,....], 
    function (obj) { 
     if (obj) { 
      //do something 
     } else {    
      //PROBLEM!!! How do i specify that variable 'c' is the one that is undefined 
      //log undefined variables 
      console.log('Undefined variable: ' + obj.variableName); 
     } 
    } 
); 

Répondre

4

Yat-il un opérateur qui fournit le nom du paramètre passé dans la fonction iteratee?

Non, vous pouvez définir une liste de noms et de les associer par index, si:

const names = ['a', 'b', 'c']; 

[a, b, c].forEach((obj, i) => { 
    if (!obj) { 
     throw new Error(`${names[i]} missing a value`); 
    } 

    // do something 
}); 
+0

Ok -thanks- mais si cette liste est dynamique - s'il y a un tableau dynamique d'objets en lecture d'un fichier - comment serait-il fonctionner dans ce cas – BabyGroot

+0

@BabyGroot: Que voulez-vous nommer ces objets? – Ryan

+0

désolé pour un corps de question lâche plus tôt et merci pour l'effort - j'ai fait la question un peu plus explicite. Merci! – BabyGroot

0

Avez-vous envisagé d'utiliser un objet javascript pour tenir vos valeurs?

De cette façon, vous pourriez écrire quelque chose comme ce qui suit, en utilisant le forIn similaire;

var objects = { 
    a: {...}, 
    b: {...}, 
    c: undefined, 
    d: {...} 
} 

_.forIn(objects, function(value, name){ 
    if (!value) { 
     throw new Error(`${name} is missing a value`); 
    } 
    // Do something 
}); 
+0

oui - pas mon cas cependant, les objets sont dynamiques et préchargés. – BabyGroot

+0

Puis-je vous demander comment l'un de ces deux moyens vous empêche de le faire de cette façon? En fait, ne le ferait-il pas de cette façon? – Shadow

+0

Les définitions de l'objet ne sont pas définies de manière statique, je ne peux pas écrire: objets var = { a: {...}, b: {...}, c: non défini, d: {.. .} } – BabyGroot