gpt4 book ai didi

javascript - 如何使函数 add 在 javascript 中工作 - console.log(add(2)(3)(4))//9 而不使用 valueof 或 toString

转载 作者:行者123 更新时间:2023-12-02 18:00:09 26 4
gpt4 key购买 nike

添加无限数字的javascript问题,末尾没有空括号

我已经尝试过这个:

const Sum = function (a) {
function innerFunc (b) {
console.log("B", b)
return b ? Sum(a + b) : a;
}
}
console.log(Sum(2)(3)(4))

但它适用于 console.log(Sum(2)(3)(4)()) 即最后一个空括号,有没有办法通过更改函数来做到这一点,以便控制台日志没有空括号给出了正确的结果,目前它抛出一个错误,指出 Sum 不是函数

最佳答案

您可以实现 toString 并在需要字符串的函数中使用它。

function add(...args) {
let total = 0;

function sum (...args) {
total += args.reduce((a, b) => a + b, 0);
return sum;
}

sum.toString = function () {
return total;
}

return sum(...args);
}

console.log(add(1, 2, 3)); // 6
console.log(add(1)(2)(3)); // 6
console.log(add(1, 2)(2)(3)); // 8
console.log(add(1, 6)(2, 2)(3)); // 14
console.log(add(1, 6)(2, 2)(3, 4, 5, 7)); // 30

更高级的版本可以使用该函数进行计算以及 Symbol.toPrimitive

function add(...args) {
let total = 0;

function sum (...args) {
total += args.reduce((a, b) => a + b, 0);
return sum;
}

sum[Symbol.toPrimitive] = function (hint) {
return (['string', 'default'].includes(hint))
? total
: sum;
};

return sum(...args);
}

console.log(add(1, 2, 3)); // 6
console.log(add(1)(2)(3)); // 6
console.log(add(1, 2)(2)(3)); // 8
console.log(add(1, 6)(2, 2)(3)); // 14
console.log(add(1, 6)(2, 2)(3, 4, 5, 7)); // 30
console.log(add(1, 2)(3, 4) + 32); // 42

关于javascript - 如何使函数 add 在 javascript 中工作 - console.log(add(2)(3)(4))//9 而不使用 valueof 或 toString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74625818/

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