var data = {
type: 'TEST',
active: true,
letters: Immutable.Map({ 'a': true, 'b': false })
};
var dataToLog = _.object(
_.map(data, function(v, k) {
if (Immutable.Iterable.isIterable(v)) {
return ['*Immutable* - ' + k, v.toJS()];
} else {
return [k, v];
}
})
);
console.log('Output: ', dataToLog);
"Output: "
[object Object] {
*Immutable* - letters: [object Object] {
a: true,
b: false
},
active: true,
type: "TEST"
}
J'ai ceci dans un JSBin here.Comment gérer if/else dans la transformation JavaScript fonctionnelle des objets Immutable pour le débogage
En utilisant lodash et quelques-unes des méthodes de transformation pour manipuler des objets Immuable qui coule à travers mon flux Dispatcher JSON pour le débogage plus facile et indiquer aussi par préfixer « Immuable » au nom de la clé dans la sortie. Cela fonctionne bien, mais j'apprends à utiliser _.map, _.compose, _.curry, et je me demande si cela pourrait être encore plus fonctionnel.
Plus précisément, je me demande comment gérer cette if/else qui est dans ma fonction envoyée à _.map:
if (Immutable.Iterable.isIterable(v)) {
return ['*Immutable* - ' + k, v.toJS()];
} else {
return [k, v];
}
Je ne comprends pas comment je peux le transformer en quelque chose d'autre que de faire fonctionnel la vérification pour Immutable et le retour de cela dans des fonctions séparées qui vérifient les valeurs immuables de l'objet et une autre pour le transformer en JSON (en faisant l'appel à .toJS() d'Immutable). Je suis également aux prises avec la façon d'opérer sur ceci et obtenir la sortie désirée tout en opérant sur ceci comme un objet au lieu d'avoir ma fonction de carte retournant un tableau de la clé et de la valeur.
Pour clarifier les choses, les objectifs de la transformation globale:
- itérer sur un objet avec la clé, la valeur
- Si la valeur est pas un objet Immuable, retour clé et la valeur non modifiée
- Si valeur IS un objet Immutable, modifiez la clé pour être préfixé avec 'Immutable' et appelez .toJS() sur la valeur et renvoyez ces transformations
Qu'est-ce qui n'est pas "fonctionnel" à ce propos? (Une chose: 'if ... else', où la clause' if' * always * se termine par 'return' est redondante, vous avez juste besoin de' if' et pas de 'else'. – Pointy
Pourquoi pensez-vous que «si» n'est pas fonctionnel? – Bergi
@Pointy: Utilisez plutôt l'opérateur ternaire :-) – Bergi