Javascript函数派生" smallst& quot;数据类型
Javascript function to derive "smallest" data type?
我如何在javascript中实现一个函数,它将把字符串列表作为输入,并将输出"最小"(松散地说)类型,所有这些字符串都可以被解析到?
例子:
-
输入:("真正的","假","假"]=>输出:"布尔"。
-
输入:("1"、"4"、"9")=>输出:"int"。
-
输入:("1","4.3","9")=>输出:"浮动"(或"替身",并不重要)。
-
输入:["9/1/2016"、"2016-9-1"]=>输出:DateTime。
-
输入:("1","4.3","9/1/2016"、"纳斯塔金斯基"]=>输出:"弦"。
备注:
- 可以将其他所有内容(函数,对象,数组)标记为"字符串"。
- 可以将任何与日期相关的内容标记为"DateTime",即使没有时间组件存在。
- 需要区分int和float(这就是为什么我的输出是字符串而不是原生类型,如Number)。
- 不需要完美;只是一些大致有效的东西(如果需要,我可以改进)。
- 输入数组将有100个元素。
非常感谢!
从声明的角度来看,这很容易,如果你考虑一下标准:
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'
...
相关文章:
- javascript解释器如何理解变量的数据类型
- 从查询字符串参数推断出正确的数据类型
- 为什么不'我们在javascript中使用函数参数的数据类型
- 基于数据类型的编辑框的汇总列表
- 如何降低此函数的复杂性,该函数根据数据类型进行回调
- 比较和分配数据类型的困难
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- E4X中是否有一种方法可以将基元数据类型的XMLList转换为类似于Array.join()的Array
- Highcharts系列.数据数据类型限制
- 如何在php循环中显示隐藏的数据类型
- 如何从标签数据类型=“;无线电”;
- 如何使用 Java 脚本从 csv 文件中查找每列的数据类型
- 在 Javascript 中更改数据类型
- 抽象数据类型等效于类型
- JavaScript中的“符号”原始数据类型是什么?
- 数据类型Jasmine
- 有没有一种方法可以在Typescript中自动检查数据类型的数据相等性
- 了解JavaScript中的基元数据类型
- 当数据类型为XML时,如何将url参数传递给AJAX jquery
- Javascript函数派生" smallst& quot;数据类型