具有多个参数括号的javascript函数规则

时间:2019-06-11 18:37:15

标签: javascript

您如何编写这样的函数

f()()

f('it') == fit
f()('x') == fox

我有

function f(s){
  return "f"+s;
}

5 个答案:

答案 0 :(得分:2)

我不仅要从您的问题而且还要从您的评论中分辨出您要查找的内容。看起来每个字符串都以'f'开头,每个空括号对都附加一个'o'。最后,一个非空括号对附加其参数。

我实际上认为这是一个很酷的元编程挑战。

这应该有效:

let f = (str, depth=0) => str
  ? `f${'o'.repeat(depth)}${str}` // If given param, terminate
  : str => f(str, depth + 1);     // If no param, return func

// "fit"
console.log(f('it'));

// "fox"
console.log(f()('x'));

// "fortress"
console.log(f()('rtress'));

// "football"
console.log(f()()('tball'));

// "foooooool!!!"
console.log(f()()()()()()()('l!!!'));

答案 1 :(得分:1)

您只有3个必需的输出,并且没有说明其他行为要求。因此,最简单的方法是:

let f = arg => 
  arg ? 'f' + arg : arg => arg ? 'fo' + arg : '';

console.log(f()()); // ''
console.log(f('it')); // 'fit'
console.log(f()('x')); // 'fox'

答案 2 :(得分:0)

这是一个非常奇怪的函数,但是如果您第一次没有得到参数,可以通过让命名函数返回一个匿名函数来实现:

function f(s, str) {
  if(typeof str === "undefined") {
    str = "f"
  }
  if(typeof s === "undefined") {
    return function(t) {
      return f(t, str + "o")
    }
  } else {
    return str + s;
  }
}

答案 3 :(得分:0)

您可以为一个函数多次调用返回一个函数,并实现一个toString方法以获取最终的字符串。

function f(v) {
    var s = 'f' + (v || 'o');
    function g(v) {
        s += v || 'o';
        return g;
    };
    g.toString = function () { return s; };
    return g;
}

console.log(f()());                // foo
console.log(f('it'));              // fit
console.log(f()('x'));             // fox
console.log(f()()('b')('a')('r')); // foobar

答案 4 :(得分:0)

哈哈,前几天我看到了这个问题,我使用了函数currying:

var f = s => s ? `f${s}` : (g=o=>e=>e?`f${o+e}`:g(o+'o')) && g('o') 

console.log(f('x'))
console.log(f()()('l'))
console.log(f()()()('bar'))