【问题标题】:Transform a string into array using javascript使用javascript将字符串转换为数组
【发布时间】:2011-08-01 13:02:46
【问题描述】:

我有一个这样的字符串:

string = "locations[0][street]=street&locations[0][street_no]=
         34&locations[1][street]=AnotherStreet&locations[1][street_no]=43";

我必须如何处理这个字符串,以便我可以随心所欲地使用locations[][]

【问题讨论】:

  • 你从哪里得到字符串?从一开始就创建一个合适的 JS 对象可能更容易。
  • 看起来你必须使用split 使用& 作为分隔符,然后使用eval 来评估每个部分。你不能有更多“正确”的数据源吗?
  • 这就是我获取数据的方式,不幸的是我无法做任何改变。需要按原样解析它,现在我无法解决问题。

标签: javascript arrays string


【解决方案1】:

你可以写一个解析器:

var myStr = "locations[0][street]=street&locations[0][street_no]=34&locations[1][street]=AnotherStreet&locations[1][street_no]=43";


function parseArray(str) {
    var arr = new Array();
    var tmp = myStr.split('&');
    var lastIdx;
    for (var i = 0; i < tmp.length; i++) {
        var parts = tmp[i].split('=');
        var m = parts[0].match(/\[[\w]+\]/g);
        var idx = m[0].substring(1, m[0].length - 1);
        var key = m[1].substring(1, m[1].length - 1);
        if (lastIdx != idx) {
            lastIdx = idx;
            arr.push({});
        }
        arr[idx * 1][key] = parts[1];
    }
    return arr;
}

var myArr = parseArray(myStr);

【讨论】:

  • +1 不错的解决方案,尽管我认为您的意思是 push 而不是 add
  • @Joey - push 是实例方法,它也可以工作。 Array.add(instance, value) 为数组添加新索引。
  • 它抛出这个:Uncaught TypeError: Object function Array() { [native code] } has no method 'add',尝试 push,同样的错误
  • 我只是不确定您是否获得了太多的浏览器覆盖率,但无论如何。
  • @Joey - touche! Gomoi 得到了你所说的……将更新 w/push,而不是 .add..
【解决方案2】:

正如影子向导所说,使用 split 和 eval 似乎是解决方案。 如果要避免错误,则需要先初始化位置。

stringArray=string.split("&");
for (var i=0;i<stringArray.length;i++){
    eval(stringArray[i]);
}

但是,您可能需要注意 street 和 street_no 是什么。 因为没有定义街道,所以会产生错误。

编辑:您需要使用尽可能多的项目完全初始化位置以避免错误。

【讨论】:

  • 在使用来自外部源的字符串时要非常小心。除非来源是 100% 受信任的,否则这是非常危险的。
  • 是的,我知道这是一些危险的东西,我尽量避免使用它,除非它是唯一的方法(或者到目前为止它比其他方法更容易)。像 Brian 那样使用正则表达式似乎是一种更安全(更清洁)的方式,但时间更长。
猜你喜欢
  • 2022-01-23
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 2013-02-12
相关资源
最近更新 更多