2016-10-05 5 views
3

У меня есть список, похожий на этот:Ramda `evolve` вложен объект

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

Я хочу изменить каждое имя файла с например«Защитой». Как это сделать, используя ramda?

Я пытался что-то вроде:

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

var f = R.evolve(trans) 

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

Но это не работает. Мне нужно как-то включить поле stack.

ответ

3

Ну, это не очень, но я думаю, что это будет делать:

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

Вы могли бы также использовать evolve внутри, но lens эс довольно мощный, и в более общем смысле полезно.