我怎样才能在javascript中实现一个函数,它将一个字符串列表作为输入,并输出"最小的" (松散地说)可以解析所有这些字符串的类型吗?
示例:
输入:[" true"," false"," false"] =>输出:"布尔"。
输入:[" 1"," 4"," -9"] =>输出:" int"。
输入:[" 1"," 4.3"," -9"] =>输出:"浮动" (或" double",无所谓)。
输入:[" 9/1/2016"," 2016-9-1"] =>输出:" DateTime"。
输入:[" 1"," 4.3"," 9/1 2016"," Nastassja Kinski" ] =>输出:"字符串"。
说明:
非常感谢!
答案 0 :(得分:1)
如果你在考虑标准的话,以声明的方式思考,这很容易:
function getType(arr) {
if (arr.every(s => s === 'true' || s === 'false'))
return 'boolean'
else if (arr.every(s => isNaN(Number(s)) === false)) {
if (arr.every(n => Number(n) % 1 === 0)) return 'int'
else return 'float'
}
else if (arr.every(s => isNaN(Date.parse(s)) === false))
return 'DateTime'
else return 'string'
}
使用您的输入进行测试:
> getType(["true", "false", "false"])
'boolean'
> getType(["1","4","-9"])
'int'
> getType(["1","4.3","-9"])
'float'
> getType(["9/1/2016", "2016-9-1"])
'DateTime'
> getType(["1", "4.3", "9/1/2016", "Nastassja Kinski"])
'string'
当人们试图想出产生结果的 代码 时,就会出现困难;相反,如果你考虑你想要什么而不是如何编写代码,那么需求会变得更加清晰,解决方案也会变得更加明显。
这里要学习的另一件事是我们如何让javascript(或选择的语言,如果它不同)为我们做尽可能多的工作。使用清晰的谓词语法和内置函数(isNaN
和内置Date
个对象),它只有8行代码,并且清楚易懂。
有人评论了不同实现的日期格式,这是一个好点。虽然所有主要实现都支持常见的日期格式,但如果我们发现我们的日期格式更具异国情调,那么我们可以简单地编写自己的日期验证器并将其插入。无论哪种方式,方法都保持不变:
...
else if (arr.every(s => myCustomDateValidator(s)))
return 'DateTime'
...