如何在Javascript中确定字符串内表达式的类型?

时间:2017-12-20 14:24:04

标签: javascript rest

我有一个休息调用,它从查询参数中提供信息,我需要确定它们是字符串还是int,数组,布尔值。

例如,如果我有:

/.../ something?id = 1

我会收到' 1'但我知道整数

此外,我有:

/.../ something?id = [1,2,3]

我会收到' [1,2,3]'但我知道它是数组。最后,如果我有:

/.../ something?id = string

我会收到' string'我应该将它用作常规的字符串

正则表达式是对每种类型进行检查的唯一方法吗?

4 个答案:

答案 0 :(得分:2)

您可以将JSON.parse与catch块一起使用。

var options = ['12', '[1,2,3]', 'string', 'false', '{"x" : 2}', '/hey/', /hey/];

var parsed = options.map(x => {
    try {
        return JSON.parse(x)
    } catch(e) {
        return x;
    }

});

var types = parsed.map(x => /\[object (.*)\]$/.exec(Object.prototype.toString.call(x))[1])

console.log(types);

答案 1 :(得分:1)

获得value

var value = "1"; //or whatever value after `id=`

你可以应用这个逻辑

var type = "";
var isNum = ( s ) => !isNaN(s);
var isObject = ( s ) => {
   try { s = JSON.parse(s); return Array.isArray(s) ? "array" : "object" } catch( e ){ return false }
};

现在将它们用作

type = isNum( value ) ? "number" : ( isObject( s ) || "string" );

注意

  • 如果value是函数定义,它仍将返回string

答案 2 :(得分:0)

解决此问题的一种方法是使用反复试验方法:

  1. 如果您的值从[开始到以]结尾,您可能会认为它是一个数组。请使用JSON.parse来确定。
  2. 如果第一种情况不匹配,请使用/^\d+$/根据整数值测试字符串。请使用parseInt()来确定。
  3. 最后,如果上面两个测试用例都失败了,你可以确定它是一个字符串,因为字符串可以容纳几乎所有类型的值。

答案 3 :(得分:0)

Savio的,

你可以处理它的一种方法是获取值并使用' typeof'看看它们是什么。

Typeof explanation on MDN

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import loadmat
from PIL import Image
import scipy.misc as smp
from random import random
from math import exp

image = Image.open('jama.png').convert('L')

#image.show()
arrimag = np.array(image)
#print(arrimag.shape)
#print(arrimag)
row_windowsize = 8
column_windowsize = 8
imagelen = len(arrimag)
f = np.array([])
for row in range(0, imagelen, row_windowsize):
    for column in range(0, imagelen, column_windowsize):
        win = arrimag[row:row+row_windowsize, 
column:column+column_windowsize]
        window1 = np.zeros((64,1))
        window1 = win.ravel()
        window1 = window1.reshape(64,1)
        f = np.append(f,window1)
window = f.reshape((1024,64))
#print(window)