我试图在JavaScript中学习函数式编程和lambdas,以下示例表明应该添加感叹号。我创造了lambda,但试图追加让我感到难过。我最终做到这一点的方式是一种hacky并且看起来不对。
Link to code example(不是我的,但是分配者)
分发者
var addToDom = (str) =>
document.getElementById('mydiv2').innerHTML = str;
var h1 = (str) => '<h1>' + str + '</h1>';
var echo = (str) => () => str;
我的添加
String.prototype.repeat = function(times) {
return (new Array(times + 1)).join(this);
};
var repeat = (str, multip) => str.repeat(multip);
R.compose(addToDom, h1, echo('Hello FP'.concat(repeat('!', 3))))();
你应该如何创造一切
R.compose(addToDom, h1, repeat, echo('Hello FP'))();
答案 0 :(得分:1)
这个练习有点误导,因为一个可以“重复一个字符任意次数”的函数以及他称之为一个字符的方式有点奇怪。
我猜你应该创建一个函数repeatChar
,它可以重复任何所需次数的字符,然后使用repeat
追加“!”三次这样:
var repeatChar = (c,t) => Array(t+1).join(c)
var repeat = (str) => str + repeatChar('!', 3);
R.compose(addToDom, h1, repeat, echo('Hello FPx'))();
repeatChar
函数获取字符(c
)和重复次数(t
)并返回t
次c
字符串。所以repeatChar('!',3)将返回“!!!”。
略显奇怪的Array(t+1)
会创建一个包含t+1
项的空数组。当我们打电话给join(c)
时,我们最终会t
次使用字符c
...不涉及任何循环: - )
然后,在repeat
中,我们将使用此辅助函数获取str
并附加这三个感叹号。
我想,就是这样呢?