Ramda `evolve` 嵌套对象

Ramda `evolve` nested object

我有一个类似这样的列表:

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

我想更改每个文件名,例如 'def'。如何使用 ramda ?

我试过类似的东西:

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

var f = R.evolve(trans)

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

但是没用。我需要以某种方式在解决方案中包含 stack 字段。

好吧,这不是很漂亮,但我认为这可以做到:

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

您可能还可以在内部使用 evolve,但是 lenses 非常强大,而且更普遍。