Ramda JS:如何在每个对象上为给定的 属性 调用 R.replace 执行映射?
Ramda JS: How to perform a map where I call R.replace for a given property on each object?
给定以下数据:
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 );
R.map(R.over(R.lensProp('name'), R.replace('John', 'Ben')))(my_data)
见R.over
and R.lensProp
。
没有理由偏爱无点函数。可读性才是真正重要的:
var myData = [ new Person("John", 22)
, new Person("Johnny", 15)
, new Person("Dave", 27)
];
var fixedData = myData.map(fixName);
alert(JSON.stringify(fixedData, null, 4));
function fixName(person) {
return Object.assign(new Person, person, {
name: person.name.replace(/John/g, "Ben")
});
}
function Person(name, age) {
this.name = name;
this.age = age;
}
无点函数在非常有限的情况下很有用,例如 eta conversion and function composition。无点函数不应被视为函数式编程的基石。
给定以下数据:
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 );
R.map(R.over(R.lensProp('name'), R.replace('John', 'Ben')))(my_data)
见R.over
and R.lensProp
。
没有理由偏爱无点函数。可读性才是真正重要的:
var myData = [ new Person("John", 22)
, new Person("Johnny", 15)
, new Person("Dave", 27)
];
var fixedData = myData.map(fixName);
alert(JSON.stringify(fixedData, null, 4));
function fixName(person) {
return Object.assign(new Person, person, {
name: person.name.replace(/John/g, "Ben")
});
}
function Person(name, age) {
this.name = name;
this.age = age;
}
无点函数在非常有限的情况下很有用,例如 eta conversion and function composition。无点函数不应被视为函数式编程的基石。