Javascript函数派生" smallst& quot;数据类型

Javascript function to derive "smallest" data type?

本文关键字:quot 数据类型 smallst 函数 派生 Javascript      更新时间:2023-09-26

我如何在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'
...