#javascript #typescript #data-structures
#javascript #typescript #структуры данных
Вопрос:
Я пытаюсь получить тип данных (?) из строкового входного значения.
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('{') amp;amp; d.endsWith('}')) {
return typeof {}
} else if(d.indexOf('-') !== -1 amp;amp; !isNaN(Date.parse(d))) {
return 'Date';
} else if(!isNaN(parseFloat(d))) {
return typeof 1
} else if(d.startsWith('[') amp;amp; 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 :(
Комментарии:
1. это может быть слишком сложно
2. Вам придется создать свой собственный анализатор JS, если вы не можете использовать встроенный анализатор (
eval
), что очень часто не является безопасным решением.3. Не могли бы вы привести мне пример?
4.
Object.prototype.toString.call(eval('1'))
…5. хм, я думаю, мне нужно создать свой собственный анализатор JS… Не могли бы вы помочь мне с этим?
Ответ №1:
Вы можете попробовать что-то вроде этого:
function funct(d) {
if(d.startsWith('{') amp;amp; d.endsWith('}')) {
return Object
} else if(d.indexOf('-') !== -1 amp;amp; !isNaN(Date.parse(d))) {
return Date;
} else if(!isNaN(parseFloat(d))) {
return Number
} else if(d.startsWith('[') amp;amp; d.endsWith(']')) {
return Array
} else return String
}
Примечание: это было протестировано в JS, поэтому я удалил аннотации типов. Пожалуйста, если вы хотите скомпилировать его в TypeScript.
Комментарии:
1. Это то, что я искал!
2. Я только что отредактировал свой вопрос. Не могли бы вы проверить мои тестовые примеры? Сбой: (
3. число функция Номер () { [собственный код] } число функция Номер() { [собственный код] } строка функция Строка() { [собственный код] } строка функция Номер() { [собственный код] } Объект функция Объект() { [собственный код] } Массив функция Массив(){ [собственный код] } Функция массива Array() { [собственный код] } Это результат, когда я запускал ваш код. Для меня все в порядке
4. Для массива не возвращайте значение typeof . Массив — это объект в JavaScript