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

时间:2018-03-27 17:49:47

标签: angularjs parameters deserialization

我有以下查询字符串:

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

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

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

或者我是否必须为此案例实现特定的反序列化器?

1 个答案:

答案 0 :(得分:0)

我解决了。

我做的是:

  1. 将查询字符串作为$location.search()
  2. 的对象获取
  3. 通过查询字符串对象进行迭代。
  4. 当与查询字符串对象键匹配时,使用RegEx /rooms\[(.*)\]\[(.*)\]/获取数组的索引和内部对象的键。
  5. 算法是:

    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(',')
                }
            }
        }
    }