2

我需要解析同时包含文本和数字的查询字符串。例如以下查询字符串:

?userID=12&team=Sales&quarter=Q1&count=2310

应翻译成以下 JavaScript 对象:

{
userID:12, // not "12"
team:"Sales",
quarter:"Q1",
count:2310 // not "2310"
}

目前我分两步进行:

  1. 解析查询字符串
  2. 遍历所有参数并确定哪些是数字(使用正则表达式或 isNumber 函数!isNaN(parseFloat(n)) && isFinite(n)

这似乎相当低效,尤其是因为我的大多数参数都不是数字。有没有更好的办法?

4

3 回答 3

1

你知道你要在哪里使用指定值吗?

因为如果您将任何数字格式的字符串(如“3239”)乘以 1,这将把该字符串转换为数字..

var example = 5 + (o.count*1) //o.count will be a number...
于 2013-02-22T20:57:44.320 回答
1

两个建议:

  1. 如果您知道哪些参数将保存数字,则只对那些参数进行转换
  2. 据我所知,将字符串转换为数字的最快方法是对它们使用一元运算符,如下所示:

    +(strVar)

乘以 1 也应该是快速的 AFAIK

于 2013-02-22T20:48:23.630 回答
0

解析查询字符串后,您可以将整数值的这些字符串表示形式转换为实际整数,如下所示:

var obj; // your object that the string is parsed into, with all values as strings.
for (var prop in obj) {
    if (String(parseInt(obj[prop])) === obj[prop]) {
        obj[prop] = parseInt(obj[prop]);
    }
}
于 2013-02-22T20:51:14.817 回答