把对象转化为GET方式请求参数

682 阅读1分钟
query: {
  reach: {
    grades: '0, 1, 2',
    upReach: '',
    reachName: '',
    institution: {
      institutionId: 3,
      levelPath: '-0000000-0000002-0000003'
    }
  },
  page: 1,
  rows: 15
}

转化为

?reach.grades=0, 1, 2&reach.upReach=&reach.reachName=&reach.institution.institutionId=3&reach.institution.levelPath=-0000000-0000002-0000003&page=1&rows=15

function objectToQuery() {
    let obj = arguments[0];
    let prefix = arguments[1];
    if (typeof obj !== "object") return "";
    const attrs = Object.keys(obj);
    return attrs.reduce((query, attr, index) => {
        // 判断是否是第一层第一个循环
        if (index === 0 && !prefix) query += "?";
        if (typeof obj[attr] === "object") {
            const subPrefix = prefix ? `${prefix}.${attr}` : attr;
            query += this.objectToQuery(obj[attr], subPrefix);
        } else {
            if (prefix) {
                query += `${prefix}.${attr}=${obj[attr]}`;
            } else {
                query += `${attr}=${obj[attr]}`;
            }
        }
        // 判断是否是第一层最后一个循环
        if (index !== attrs.length - 1) query += "&";
        return query;
    }, "");
}