2016-10-05 1 views
3

J'ai une liste semblable à ceci:`evolve` Ramda objet imbriqué

var list = [ 
    { 
    stack: [ 
     { 
     file: 'abc' 
     } 
    ] 
    }, 
    { 
    stack: [ 
     { 
     file: 'abc' 
     }, 
     { 
     file: 'abc' 
     }  
    ] 
    } 
]; 

Je souhaite modifier tous les noms de fichier avec par exemple « def ». Comment faire cela en utilisant ramda?

J'ai essayé des choses comme:

var trans = { 
    file: replace('abc', 'def') 
}; 

var f = R.evolve(trans) 

var f2 = R.map(f) 
R.map(f2, list) 

Mais il ne fonctionne pas. Je dois inclure le champ stack dans la solution en quelque sorte.

Répondre

3

Eh bien, ce n'est pas assez, mais je pense que cela va le faire:

R.map(R.over(
    R.lensProp('stack'), 
    R.map(R.over(R.lensProp('file'), R.replace('abc', 'def'))) 
))(list) 

Vous pouvez probablement utiliser aussi un evolve intérieur, mais lens es sont assez puissants, et plus généralement utiles.