javascript - 从字符串输入解析 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 :(
解决方案
我不知道您需要检测什么类型的字符串,但根据您的情况,您可以:
- 使用
JSON.parse
. 如果您要从服务器获取数据,这就是要走的路。请注意,您不应该解析字符串。相反,解析来自服务器的整个响应。 - 误用
eval()
。不要这样做!这是一种选择,但也是最糟糕的一种。 - 正则表达式。它可能有效,但绝对不是最佳的。
既然我知道了情况,使用JSON.parse()
是最好的选择。
推荐阅读
- c# - 如何在20停止它?
- tabulator - 更改图标/按钮列的格式
- java - 如何从 javaFX 文本字段中获取 UserInput:
- python - 鉴于有很多商店(熊猫),从上一期获取商店的销售额
- retrofit2 - 将 ActivityTestRule 更新为 ActivityScenario
- javascript - 将多个参数传递给 Svelte 中的动态路由
- axios - getServerSideProps 外部 api 数据获取返回错误
- sql - 如果 SQL :parameter 在 DB2 JDBC 中为“ALL”,如何匹配所有行?
- java - 如何将 JavaDoc 转换为 Markdown?
- python - 列出具有最大重复字符的字符串的所有可能排列