【问题标题】:Check data type from string input in JavaScript从 JavaScript 中的字符串输入检查数据类型
【发布时间】:2021-02-04 16:09:21
【问题描述】:

我正在尝试从字符串输入值中获取 DataType(?)。

const data = ['1', 'hello', '[]', '{key: [value]}', '`2020-10-08`'];

function funct(data: string): DataType {
    if(??) {
        return Object
    } else if(??) {
        return Number
    } else if(??) {
        return Array
    } else if (??) {
        return Date
    }
    return String
}

data.map((d) => console.log(funct(data)));
// Number, String, Array, Object, Data

function funct(d) {
    if(d.startsWith('{') && d.endsWith('}')) {
        return typeof {}
    } else if(d.indexOf('-') !== -1 && !isNaN(Date.parse(d))) {
        return 'Date';
    } else if(!isNaN(parseFloat(d))) {
        return typeof 1
    } else if(d.startsWith('[') && d.endsWith(']')) {
        return typeof []
    } else return typeof 'string'
}
console.log('number', funct('1'));
console.log('number', funct('123'));
console.log('string', funct('`as2d`'));
console.log('string', funct('2s2d'));
console.log('Object', funct('{}'));
console.log('Array', funct('[]')); //object :( 
console.log('Array', funct('["d", "f"]')); //object :(

【问题讨论】:

  • 这可能太难了
  • 如果您不能使用内置解析器 (eval),您必须创建自己的 JS 解析器,这通常不是一个安全的解决方案。
  • 你能举个例子吗?
  • Object.prototype.toString.call(eval('1')) ...
  • 嗯,我想我需要创建自己的 JS 解析器...你能帮我吗?

标签: javascript typescript data-structures


【解决方案1】:

你可以试试这样的:

function funct(d) {
    
    if(d.startsWith('{') && d.endsWith('}')) {
        return Object
    } else if(d.indexOf('-') !== -1 && !isNaN(Date.parse(d))) {
        return Date;
    } else if(!isNaN(parseFloat(d))) {
        return Number
    } else if(d.startsWith('[') && d.endsWith(']')) {
        return Array
    } else return String
}

注意:这是在 JS 中测试的,所以我删除了类型注释。如果你想用 TypeScript 编译它,请他们。

【讨论】:

  • 这就是我一直在寻找的!
  • 我刚刚编辑了我的问题。你能检查我的测试用例吗?它失败了:(
  • number function Number() { [native code] } number function Number() { [native code] } string function String() { [native code] } string function Number() { [native code ] } Object function Object() { [native code] } Array function Array() { [native code] } Array function Array() { [native code] } 这是我运行您的代码时的输出。我觉得还可以
  • 对于数组,不要返回 typeof 值。数组是 JavaScript 中的对象
猜你喜欢
  • 2011-05-24
  • 2011-08-12
  • 2012-06-03
  • 2022-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多