gpt4 book ai didi

javascript - JavaScript 中带有未知参数的柯里化(Currying)函数

转载 作者:行者123 更新时间:2023-11-30 14:37:02 24 4
gpt4 key购买 nike

在最近的一次采访中,我被要求编写一个添加数字并接受如下参数的函数:

add(1)(2)(3) // result is 6
add(1,2)(3,4)(5) // result is 15

参数个数不固定,参数可以成组传递,也可以单独传递。

如何实现这个add功能?

最佳答案

鉴于您的示例,参数的数量在某些方面是固定的。

正如@ASDFGerte 所指出的,您的示例似乎在三次调用后返回了结果。在这种情况下,不引入可变参数和柯里化(Currying)等术语的简单实现可能是

function add(...args1){
return function(...args2){
return function(...args3){
return args1.concat(args2).concat(args3).reduce((a,b)=>a+b)}}}

console.log(add(1)(2)(3))
console.log(add(1,2)(3,4)(5))

每次调用都接受可变数量的参数。

不过,如果能概括这种嵌套函数结构的构造会很好,您可以通过柯里化(Currying)来实现。

但是如果你想允许任意数量的调用,你应该什么时候停止返回一个新函数并返回结果呢?没有办法知道,这是一个简单、不准确和片面的解释,目的是让您了解为什么他们说您无法完成他们要求您完成的任务。

所以最终的问题是:您是否可能误解了这个问题?又或许这只是考验你的把戏

编辑

另一种选择是在没有传入参数时实际调用函数,将调用更改为 add(1)(2)(3)()

这里是一个递归实现的例子

function sum (...args) {
let s = args.reduce((a,b)=>a+b)

return function (...x) {
return x.length == 0 ? s : sum(s, ...x)
};
}
console.log(sum(1,2)(2,3,4)(2)())

在每次调用时计算当前参数的总和,然后返回一个新函数:

  • 如果调用时不带参数只返回当前总和
  • 如果传入其他数字,递归调用 sum 传递实际总和和新数字

关于javascript - JavaScript 中带有未知参数的柯里化(Currying)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50279242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com