是否可以降低此Javascript算法解决方案的复杂性和意大利面条的质量?

六开彩预测内部

是否可以降低此Javascript算法解决方案的复杂性和意大利面条的质量?

问题:

创建一个将两个参数加在一起的函数.

如果仅提供一个参数,则返回一个期望一个参数并返回总和的函数.

六开彩预测内部例如,addTogether(2,3)应该返回5,而addTogether(2)应该返回一个函数。

然后使用单个参数调用此返回的函数将返回总和:

var sumTwoAnd = addTogether(2);

sumTwoAnd(3)返回5.

如果任何一个参数都不是有效数字,则返回undefined。

解决方案应返回:

addTogether(2,3)应该返回5。

addTogether(2)(3)应该返回5。

addTogether(2,“ 3”)应该返回未定义.

addTogether(2)([3])应该返回未定义。

我尽了我所能,但是唯一有效的方法是,到目前为止,最好的解决方法是:

六开彩预测内部function addTogether() { "use strict"; // check if argument(s) valid number var validateNum = function(num) { if(typeof num !== "number") { return undefined; } else return num; }; // is there is one argument or two if(arguments。length > 1) { var a = validateNum(arguments[0]); var b = validateNum(arguments[1]); if(a === undefined || b === undefined) { return undefined; } else { return a b; } // if only one argument, return function that expects one argument and returns sum。 } else { var c = arguments[0]; // start here if(validateNum(c)) { return function(arg2) { if(c === undefined || validateNum(arg2) === undefined) { return undefined; } else { return c arg2; } }; // belongs to return function(arg2) {} } }}addTogether(2)(3);解决方法:

function addTogether(a, b) { if (typeof a == "number") { if (arguments.length == 1) { return b => addTogether(a, b); } else if (typeof b == "number") { return a b; } }}// as per OP"s code// returns 3console.log("addTogether(1, 2) = " addTogether(1, 2));console.log("addTogether(1, 2, 3) = " addTogether(1, 2, 3));console.log("addTogether(1)(2) = " addTogether(1)(2));console.log("addTogether(1)(2, 3) = " addTogether(1)(2, 3));console.log("addTogether(1, 2, "3") = " addTogether(1, 2, "3"));console.log("addTogether(1)(2, "3") = " addTogether(1)(2, "3"));console.log("addTogether(1, 2, [3]) = " addTogether(1, 2, [3]));console.log("addTogether(1)(2, [3]) = " addTogether(1)(2, [3]));console.log("addTogether(1, 2, NaN) = " addTogether(1, 2, NaN));console.log("addTogether(1)(2, NaN) = " addTogether(1)(2, NaN));// returns NaNconsole.log("addTogether(1, NaN) = " addTogether(1, NaN));console.log("addTogether(1)(NaN) = " addTogether(1)(NaN));// returns undefinedconsole.log("addTogether() = " addTogether());console.log("addTogether(1)() = " addTogether(1)());console.log("addTogether("1") = " addTogether("1"));console.log("addTogether(1, "2") = " addTogether(1, "2"));console.log("addTogether(1)("2") = " addTogether(1)("2"));console.log("addTogether(1, [2]) = " addTogether(1, [2]));console.log("addTogether(1)([2]) = " addTogether(1)([2]));

提出了以下改进,但是它们将改变OPs代码的语义:

>如果a或b为NaN,则返回未定义,因为NaN不是“有效数字”

>如果提供了两个以上的参数,而不是默默地删除它们,则返回undefined(感谢@PatrickRoberts)

如果您不介意为e返回函数. G. addTogether(‘x’),使用:

function addTogether(a, b) { if (arguments.length == 1) { return b => addTogether(a, b); } else if (typeof a == "number" && typeof b == "number") { return a b; }}

这样,您将始终为一个参数和Number返回一个函数,或者为两个或多个参数返回undefined =更可靠的代码.

为了实现ES5兼容性,并且如果您不介意addTogether(2)()返回函数,请替换b =>. addTogether(a,b)与addTogether.bind(undefined,a)(感谢@PatrickRoberts).

来源:https://www.icode9.com/content-1-562951.html

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。

我要收藏
赞一个
踩一下
分享到
相关推荐
精选文章

分享
评论
六开彩预测内部
挂牌平特新图 手机查看开奖结果直播 中特内部免费公开 看图解平特一肖 今天香港马报资料 香港本港台现场报码 开奖现场官方网站 最准平特一肖官网资料 六合直播平台 直播六合采开奖记录