首页 > 解决方案 > 从字符串输入解析 DataType

问题描述

DataType = {
   Object: 'OBJECT',
   Number: 'NUMBER',
   String: 'STRING',
   Array: 'ARRAY',
   Date: 'DATE',
}
const data = ['1', 'hello', '[]', '{key: [value]}', '`2020-10-08`'];

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

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

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


我已经尝试过了,但它在我的测试中失败了。

function funct(num) {
  if (/^-?[\d.]+(?:e-?\d+)?$/.test(num)) {
    return typeof 1;
  } else if (/^[\"'`].*[\"'`]$/) {
    return typeof 'string';
  } else if (/^\[.*\]$/) {
    return typeof []
  } else if (/^\{.*\}$/) {
    return typeof {}
  }

}

console.log('number', funct('1'));
console.log('number', funct('123'));
console.log('string', funct('as2d'));
console.log('string', funct('2s2d'));
console.log('Object', funct('{}')); // returning string :(
console.log('Array', funct('[]')); //returning string :(
console.log('Array', funct('["d", "f"]')); //returning string :(

标签: javascripttypescriptif-statementconditional-statements

解决方案


我不知道您需要检测什么类型的字符串,但根据您的情况,您可以

  1. 使用JSON.parse. 如果您要从服务器获取数据,这就是要走的路。请注意,您不应该解析字符串。相反,解析来自服务器的整个响应。
  2. 误用eval()不要这样做!这是一种选择,但也是最糟糕的一种。
  3. 正则表达式。它可能有效,但绝对不是最佳的。

既然我知道了情况,使用JSON.parse()是最好的选择。


推荐阅读