javascript - 在参数上使用魔法 - 但前提是它们是数字(Javascript 算法)
问题描述
问题
创建一个将两个参数相加的函数。如果只提供一个参数,则返回一个函数,该函数需要一个参数并返回总和。
例如,addTogether(2, 3) 应该返回 5,addTogether(2) 应该返回一个函数。
使用单个参数调用此返回函数将返回总和:
var sumTwoAnd = addTogether(2);
sumTwoAnd(3) 返回 5。
如果任一参数不是有效数字,则返回 undefined。
我试过的
function addTogether(a, b) {
if(typeof(a) !== 'number'){
return undefined;
}
if(arguments.length == 2){
let tim = arguments[0] + arguments[1];
if(!tim.isNaN){
return tim;
}
}
else if(arguments.length == 1){
return function(a, c){
let result = c + a;
if(!result.isNaN){
return result;
}
}
}
}
addTogether(2,3);
console.log(addTogether(2)([3]))
console.log(addTogether(2),(3))
以下 Console.logs 失败
addTogether(2)(3) 应该返回 5。
addTogether(2, "3") 应该返回未定义。
addTogether(2)([3]) 应该返回未定义。
我想知道的
- 你如何修复我的代码?
- 你会怎么做?
解决方案
您需要将所有参数验证为数字。您最初使用 是正确的typeof a !== 'number'
,但您也需要在其他任何地方都这样做 - 无论是在检查时b
,如果提供了第二个参数,以及在返回函数时,如果没有提供第二个参数。
要返回一个函数,只需使用return (b) => { // logic }
:
function addTogether(a, b) {
if (typeof a !== 'number') {
return;
}
if (arguments.length >= 2) {
if (typeof b !== 'number') {
return;
}
return a + b;
}
// then a is the only argument
return (b) => {
if (typeof b !== 'number') {
return;
}
return a + b;
};
}
console.log(addTogether(2, 3));
console.log(addTogether(2)(3));
console.log(addTogether('foo'));
推荐阅读
- kubernetes - Kubernetes 入口烧瓶应用程序
- excel - Excel 将我使用 Range.FormulaLocal 定义的公式更改为具有结构化引用的公式。我不想要那个,我怎么能改变它?
- entity-framework-core - 使用 Entity.CurrentValues.SetValues 更新导航属性
- python - Vowpal Wabbit - 格式错误的示例,只有一行可以有成本(上下文强盗)
- swift - AR Quick Look - Using double sided Materials in USDZ is not displayed
- podman - 从 Docker 迁移到 Podman
- vue.js - vuex 模块的 npm 包在调度后给出错误
- c# - 使用 Microsoft.CodeAnalysis.CSharp.Scripting 动态执行 C# 失败
- git - 在用户提交后,推送到远程 git 存储库之前,如何通过 sonarqube 分析代码?
- c++ - 如何从 unordered_map 中删除向量元素