【问题标题】:Most efficient way to retrieve numbers from a querystring?从查询字符串中检索数字的最有效方法?
【发布时间】:2013-02-08 13:59:08
【问题描述】:

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

?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)

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

【问题讨论】:

  • 不确定这是否适用于 javascript 和 C#,但 ... related question.
  • @jbabey thx,但在我的情况下似乎效果不佳,因为我可能有十进制数字。

标签: javascript numbers query-string url-parameters url-parsing


【解决方案1】:

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

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

var example = 5 + (o.count*1) //o.count will be a number...

【讨论】:

  • 好的,再想想,这似乎是要走的路。我想我的问题是 xy 问题...
【解决方案2】:

两个建议:

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

    +(strVar)

同样乘以 1 应该是快速的 AFAIK

【讨论】:

  • 我从许多表单中收集参数,但没有包含数字的列表。感谢一元运算符的想法,它会对非数字做什么?
  • 不是数字乘以 1 返回 NAN 你可以制作一个像 var num = (isNAN(o.count*1)) 这样的四元数吗? o.count : o.count*1
  • 刚刚用 +(string) 做了一个测试 :-)
【解决方案3】:

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

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]);
    }
}

【讨论】:

  • 对,这就是我现在使用 isNumber 函数所做的事情。我一直在寻找一种更有效的方法,要么在解析时识别数字,要么不必测试所有参数。
  • @Christophe 我猜该方法取决于您是否提前知道所有属性名称将是什么,并了解其中哪些应该是整数。如果您想处理任意属性,我认为您将无法避免对所有属性进行这样的数字检查。无论如何,这可能是一个微优化,除非您要对非常大的查询字符串执行此操作和/或执行很多次。
  • 您可以通过将 parseInt(obj[prop]) 的结果存储在变量中来改进上述情况,这样您就不会调用 parseInt 两次
猜你喜欢
  • 2012-12-18
  • 2012-09-03
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 2012-03-23
  • 2014-03-28
相关资源
最近更新 更多