代码之家  ›  专栏  ›  技术社区  ›  Francisco Hanna Mackay

从AngularJS中的查询字符串反序列化数组

  •  1
  • Francisco Hanna Mackay  · 技术社区  · 7 年前

    我有以下查询字符串:

    ?rooms[0][adult]=2&rooms[0][children]=3,4&rooms[1][adult]=3
    

    AngularJS或vainilla Javascript中是否有任何直接方法可以从中获取以下对象:

    [
       {
          adult: 2,
          children: [3, 4]
       },
       {
          adult: 3,
       }
    ]
    

    或者我必须为这种情况实现特定的反序列化器吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Francisco Hanna Mackay    7 年前

    我解决了它。

    我所做的是:

    1. 将查询字符串作为对象获取 $location.search()
    2. 通过查询字符串对象进行迭代。
    3. 使用正则表达式 /rooms\[(.*)\]\[(.*)\]/ 在与查询字符串对象键匹配时,获取数组的索引和内部对象的键。

    算法为:

    let queryString = $location.search();
    let regEx = /rooms\[(.*)\]\[(.*)\]/;
    
    let rooms = [{}];
    for (let roomKey in queryString) {
        let matches = roomKey.match(regEx);
        if(matches) {
            let index = parseInt(matches[1]);
            let key = matches[2];
            if(key == 'adult') {
                rooms[index] = {
                    adult: queryString[roomKey]
                }
            }
            else if (key == 'children') {
                rooms[index] = {
                    children: queryString[roomKey] == "" ? [] : queryString[roomKey].split(',')
                }
            }
        }
    }