Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要派生的Javascript函数";“最小的”;数据类型?_Javascript - Fatal编程技术网

要派生的Javascript函数";“最小的”;数据类型?

要派生的Javascript函数";“最小的”;数据类型?,javascript,Javascript,如何在javascript中实现一个函数,该函数将字符串列表作为输入,并输出所有这些字符串都可以解析的“最小”(松散地说)类型 示例: 输入:[“真”、“假”、“假”]=>输出:“布尔” 输入:[“1”,“4”,“-9”]=>输出:“int” 输入:[“1”、“4.3”、“-9”]=>输出:“浮点”(或“双精度”,无所谓) 输入:[“9/1/2016”,“2016-9-1”]=>输出:“日期时间” 输入:[“1”、“4.3”、“9/1/2016”、“Nastassja Kinski”]=>输出

如何在javascript中实现一个函数,该函数将字符串列表作为输入,并输出所有这些字符串都可以解析的“最小”(松散地说)类型

示例:

  • 输入:[“真”、“假”、“假”]=>输出:“布尔”

  • 输入:[“1”,“4”,“-9”]=>输出:“int”

  • 输入:[“1”、“4.3”、“-9”]=>输出:“浮点”(或“双精度”,无所谓)

  • 输入:[“9/1/2016”,“2016-9-1”]=>输出:“日期时间”

  • 输入:[“1”、“4.3”、“9/1/2016”、“Nastassja Kinski”]=>输出:“字符串”

备注:

  • 可以将所有其他内容(函数、对象、数组)标记为“字符串”
  • 即使不存在时间组件,也可以将任何与日期相关的内容标记为“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'
...

这里的目标是什么?为什么您需要知道类型?所以不是我们为您编写代码的地方。问一些具体的问题,让我们看看你到目前为止都做了些什么。`Output:'DateTime'。`Hoo,小子。祝你玩得开心。这很容易成为一个完整的项目。是什么让一种类型比另一种类型“小”呢?哪个更小,
int
DateTime
?@zalogg谷歌“XY问题”太棒了,我喜欢它,我对javascript非常陌生,所以我甚至不知道javascript与.NET的Linq查询(我喜欢)大致相似。谢谢!感谢对日期验证程序的额外工作;很好的答案,完全符合我的要求。