如何将字符串附加到这样的函数上?

时间:2016-01-20 14:49:24

标签: javascript

我试图在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'))();

1 个答案:

答案 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)并返回tc字符串。所以repeatChar('!',3)将返回“!!!”。

略显奇怪的Array(t+1)会创建一个包含t+1项的空数组。当我们打电话给join(c)时,我们最终会t次使用字符c ...不涉及任何循环: - )

然后,在repeat中,我们将使用此辅助函数获取str并附加这三个感叹号。

我想,就是这样呢?