解析query
    例如:?a=1&a=2&b=hello&c=&d=true
    处理成对象 {a: [1, 2], b: ‘hello’, d: true};
    将重复的属性处理成数组,更深一点要处理数字类型和布尔类型

    1. function queryHandler (url) {
    2. const index = url.indexOf('?');
    3. if (index > -1) {
    4. const str = url.substr(index + 1);
    5. let arr = str.split('&');
    6. let obj = {};
    7. for (let i in arr) {
    8. let item = arr[i].split('=');
    9. let key = item[0];
    10. let value = item[1];
    11. if (value) { // 如果value有值
    12. // 处理value的值,number、boolean、string类型
    13. value = !isNaN(Number(value)) ? Number(value) : (value === 'true' || value === 'false') ? value === 'true' : value;
    14. if (obj[key] === undefined) { // 如果obj中没有这个key
    15. obj[key] = value;
    16. } else {
    17. if (Array.isArray(obj[key])) { // 判断已有key的value是否为数组
    18. obj[key].push(value);
    19. } else {
    20. obj[key] = [obj[key], value];
    21. }
    22. }
    23. }
    24. }
    25. return obj;
    26. }
    27. }