Ramda`evolve`嵌套对象

时间:2016-10-05 13:57:20

标签: ramda.js

我有一个类似的列表:

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字段。

1 个答案:

答案 0 :(得分:4)

嗯,它不漂亮,但我认为这样做会很好:

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

你可能也可以在里面使用evolve,但是lens es非常强大,而且通常更有用。