Kor*_*vis 1 javascript functional-programming ramda.js
来自Ramda Repl:
var tomato = {firstName: ' Tomato ', data: {elapsed: 100, remaining: 1400}, id:123};
Run Code Online (Sandbox Code Playgroud)
为什么这样做:
var transformations = {
firstName: ()=>'Potato'
};
// => {"data": {"elapsed": 100, "remaining": 1400}, "firstName": "Potato", "id": 123}
Run Code Online (Sandbox Code Playgroud)
但这并不是:
var transformations = {
firstName:'Potato'
};
//=>{"data": {"elapsed": 100, "remaining": 1400}, "firstName": " Tomato ", "id": 123}
Run Code Online (Sandbox Code Playgroud)
R.evolve(转化,番茄);
object
根据transformation
函数递归演化一个浅副本,创建一个新对象.所有非基本属性都通过引用复制.甲
transformation
函数如果其对应的键不存在于进化对象存在将不被调用.
简而言之,转型必须是一种功能.
为什么这样做:
Run Code Online (Sandbox Code Playgroud)var transformations = { firstName: ()=>'Potato' };
因为()=>'Potato'
是一个功能
但这并不是:
Run Code Online (Sandbox Code Playgroud)var transformations = { firstName:'Potato' };
因为'Potato'
是一个字符串,而不是一个函数.
在这种情况下,当提供的变换不是函数时,原始值.
这是源代码evolve
.我粗略化了您的示例所需的代码路径以获得输出
module.exports = _curry2(function evolve(transformations, object) {
var result = {};
var transformation, key, type;
for (key in object) {
transformation = transformations[key];
type = typeof transformation;
result[key] = type === 'function' ? transformation(object[key])
: transformation && type === 'object' ? evolve(transformation, object[key])
: object[key];
}
return result;
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1568 次 |
最近记录: |