Javascript Ramda JS:如何执行映射,在映射中我为每个对象的给定属性调用R.replace?

Javascript Ramda JS:如何执行映射,在映射中我为每个对象的给定属性调用R.replace?,javascript,functional-programming,ramda.js,Javascript,Functional Programming,Ramda.js,鉴于以下数据: const my_data = [ { name: "John", age: 22 }, { name: "Johnny", age: 15 }, { name: "Dave", age: 27 } ] 我想转换数据,使每个名称属性中的子字符串“John”替换为“Ben”,因此看起来如下所示: [ { name: "Ben", age: 22 }, { name: "Be

鉴于以下数据:

const my_data = [
  {
    name: "John",
    age: 22
  },
  {
    name: "Johnny",
    age: 15
  },
  {
    name: "Dave",
    age: 27
  }
]
我想转换数据,使每个名称属性中的子字符串“John”替换为“Ben”,因此看起来如下所示:

[
  {
    name: "Ben",
    age: 22
  },
  {
    name: "Benny",
    age: 15
  },
  {
    name: "Dave",
    age: 27
  }
]
我想以适当的功能方式这样做(我认为没有点数,但我仍在学习),这样我就可以在管道中重用它,比如说先按年龄减少,然后进行替换,或者先进行替换,然后进行排序。我如何使用Ramda函数来实现这一点

var fix_names = ???
var fixed_data = R.map( fix_names, my_data );

请参阅和。

没有理由选择无点函数。可读性才是真正重要的:

var myData=[新人(“约翰”,22岁)
,新人(“约翰尼”,15岁)
,新人(“戴夫”,27岁)
];
var fixedData=myData.map(fixName);
警报(JSON.stringify(fixedData,null,4));
函数名(个人){
返回对象。分配(新人员、人员、{
姓名:person.name.replace(/John/g,“Ben”)
});
}
职能人员(姓名、年龄){
this.name=名称;
这个。年龄=年龄;

}
R.evolve
这里也可以使用:
R.map(R.evolve({name:R.replace('John','Ben'))})
R.over(and R.evolve)是我需要看的。我试图用R.set来解决这个问题。如果我在
Person
上添加更多属性会怎么样?将每个属性添加到所有这些方法中并不是最好的解决方案您总是可以使用循环将所有属性复制到新对象上。您认为Ramda的
lensProp
函数有什么作用?它可以使用循环手动复制每个属性。事实上,复制属性是一种常见的操作,添加本机函数的唯一目的是复制多个对象的属性。该函数可用于自动将源对象的属性复制到单个目标对象上。我已更新了答案,以反映nge.当然,我理解lensProp中发生的事情。我只是想让你的代码更像davidchambers的例子。我不同意davidchambers的代码“需要很多脑力杂耍”。如果您了解Curry和lensed的基本知识,并且已经使用过Ramda一段时间,那么这段代码就相当简单了。看看,在Ramda中,它是如何自然地转换为更可组合、可维护且仍然简单的代码的:作为Ramda I的创建者之一,points free并不是万灵药。但为什么您对Lens犹豫不决,仍然购买
 映射
?对于-循环的
不是更明确吗?那么
对象如何。分配
?为什么要切换到它?当你使用它时,发生了什么事情并不那么明显。当然,这些是修辞问题。答案是显而易见的。这些是有用的抽象。镜头提供了另一个有用的抽象,就像它一样下面提到的
evolve
函数iofjuupasli。对我来说,迄今为止提供的最可读的答案是iofjuupasli的
R.map(R.evolve({name:R.replace('John','Ben'))
紧随其后的是davidchambers的
R.map(R.over(R.lensProp('name'),R.replace('John','Ben'))
。这个答案的两个版本都没有抓住问题的本质。
R.map(R.over(R.lensProp('name'), R.replace('John', 'Ben')))(my_data)