url 与 params 参数的常见操作归纳汇总(含精心准备的注释)

url 与 params 参数的常见操作归纳汇总(含精心准备的注释)

不校验网址合法性,默认你传过来的都是正常的网址

  • 针对方法名做了优化,个人觉得更加直观些
  • 后续又追加一些注释,在调用函数时语法提示更方便直观(参数类型、调用示例、方法功能解释、参数解释、返回值解释)
  • 可能后续采用面向对象封装会更好些,最起码可以省去重复传 url 这么一步操作,不过考虑到大多情况下只用其中一种方法,就暂不封装了,权当个工具库用,留待后续,或者哪位读者有兴趣总结下,留个链接也是极好的~

VSCode 语法提示

代码

srcutilurlUtil.js

/**
 * 将传入的 param 对象转换成 queryString (传入空对象会返回空字符串)
 * @example
 * paramObjToQueryString({ a: 'xx', b: 'yyy', c: 'zzz' }) => "?a=xx&b=yyy&c=zzz"
 * @param {Object} paramObj 传入的 param 对象
 * @returns {String} 转换后的 queryString
 */
function paramObjToQueryString(paramObj) {
    // 默认约定搜索条件都是字符串
    let queryStr = ''
    Object.entries(paramObj).forEach((item, index) => {
            // 可以在这里对参数做一些过滤 => 如果参数没有值,就不拼上去
            // if (item[1] === '') {
            //     return false
            // }

            // 根据第一位是不是 "?" 来决定如何拼接
            if (queryStr[0] != '?') {
                queryStr = `?${item[0]}=${item[1]}`
            } else {
                queryStr = queryStr + `&${item[0]}=${item[1]}`
            }
        })
        // console.log(queryStr, 'paramObjToQueryString queryStr')
    return queryStr
}

/**
 * 给当前 url 或指定 url 添加 param 参数,并返回新的 url
 * @example
 * addParamObjToUrl("https://www.baidu.com/s?ie=UTF-8&wd=localstorage", { test: 111 }) => "https://www.baidu.com/s?ie=UTF-8&wd=localstorage&test=111"
 * @example
 * addParamObjToUrl("https://www.baidu.com/s", { test: 111, test2: 222 }) => "https://www.baidu.com/s?test=111&test2=222"
 * @param {String} wholeUrl url
 * @param {Object} paramObj 需要添加到 url 中的 prams 对象
 * @returns {String} 处理后的 url
 */
function addParamObjToUrl(wholeUrl, paramObj = {}) {
    let url = wholeUrl ? wholeUrl : window.location.href
    let queryString = paramObjToQueryString(paramObj)
    return url.includes("?") ? `${url}${queryString && ("&" + queryString.substring(1))}` : `${url + queryString}`
}

/**
 * 给当前 url 或指定 url 添加 param 参数,并返回新的 url
 * @example
 * addParamToUrl("https://www.baidu.com/s?ie=UTF-8&wd=localstorage", "test", 111) => "https://www.baidu.com/s?ie=UTF-8&wd=localstorage&test=111"
 * @example
 * addParamToUrl("https://www.baidu.com/s", "test", 111) => "https://www.baidu.com/s?test=111"
 * @param {String} wholeUrl 需要修改的 url 地址
 * @param {String} paramName 需要添加的 param 名
 * @param {any} paramValue 需要添加的 param 值
 * @returns {String} 处理后的 url
 */
function addParamToUrl(wholeUrl, paramName, paramValue) {
    let url = wholeUrl ? wholeUrl : window.location.href
    return url.indexOf("?") > -1 ? `${url}&${paramName}=${paramValue}` : `${url}?${paramName}=${paramValue}`
}


/**
 * 获取指定 url 或者当前 url 不携带参数的地址(不传参数就默认是当前 url)
 * @example
 * getUrlWithoutParams("https://www.baidu.com/s?ie=UTF-8&wd=localstorage") => "https://www.baidu.com/s"
 * @param {String} wholeUrl 完整的 url 字符串
 * @returns {String} 处理后的 url
 */
function getUrlWithoutParams(wholeUrl) {
    let url = wholeUrl ? wholeUrl : window.location.href
    if (url.indexOf('?') > 0) {
        let baseUrl = url.substring(0, url.indexOf('?'))
        return baseUrl
    }
    return url
}

/**
 * 获取当前 url 或者指定 url 中的 params 对象(不传参数就默认是当前 url)
 * @example
 * getParamObj("https://www.baidu.com/s?ie=UTF-8&wd=localstorage") => {ie: "UTF-8", wd: "localstorage"}
 * @param {String} wholeUrl 完整的 url
 * @returns {Object} 提取出的 params 对象
 */
function getParamObj(wholeUrl) {
    let params = null;
    let url = wholeUrl ? wholeUrl : window.location.href;
    let queryParams = url.split("?");
    queryParams = Array.isArray(queryParams) && queryParams[1] ? queryParams[1] : "";

    params = {};
    let vars = queryParams.split("&");
    for (let i = 0; i < vars.length; i++) {
        let pair = vars[i].split("=");
        params[pair[0]] = pair[1];
    }

    return params;
}

/**
 * 获取指定 url 或者当前 url 中的某个查询参数,没值返回 false(该参数的值可能也正好是 false,需自行注意)
 * @example
 * getParamValueByName("https://www.baidu.com/s?ie=UTF-8&wd=localstorage", "wd") => "localstorage"
 * @param {String} wholeUrl 完整的 url 字符串
 * @param {String} paramName 需要获取到的 param 名字
 * @returns {any} 提取出的 param 值,没值返回 false(该参数的值可能也正好是 false,需自行注意)
 */
function getParamValueByName(wholeUrl, paramName) {
    let url = wholeUrl ? wholeUrl : window.location.href
    let queryStr = url.substring(url.indexOf('?') + 1);
    let params = queryStr.split("&");
    for (let i = 0; i < params.length; i++) {
        let pair = params[i].split("=");
        if (pair[0] == paramName) { return pair[1]; }
    }
    return (false);
}

/**
 * 删除当前 url 或指定 url 的指定 params 参数,并返回新的 url
 * @example
 * deleteUrlParamByName("https://www.baidu.com/s?ie=UTF-8&wd=localstorage", "ie") => "https://www.baidu.com/s?wd=localstorage"
 * @param {String} wholeUrl 需要修改的 url 地址
 * @param {String} paramName 需要删除的 param 名
 * @returns {String} 处理后的 url
 */
function deleteUrlParamByName(wholeUrl, paramName) {
    let url = wholeUrl ? wholeUrl : window.location.href
    let paramStr = url.substring(url.indexOf('?') + 1)
    let baseUrl = url.substr(0, url.indexOf("?"))
    let paramsUrl = ""

    let arr = new Array()
    if (paramStr != "") {
        let params = paramStr.split("&")
        for (let i = 0; i < params.length; i++) {
            let pair = params[i].split("=")
            if (pair[0] != paramName) {
                arr.push(params[i])
            }
        }
    }
    if (arr.length > 0) {
        paramsUrl = "?" + arr.join("&")
    }
    url = baseUrl + paramsUrl
    return url
}

export {
    paramObjToQueryString,
    addParamObjToUrl,
    addParamToUrl,
    getUrlWithoutParams,
    getParamObj,
    getParamValueByName,
    deleteUrlParamByName,
}

使用

import {
    paramObjToQueryString,
    addParamObjToUrl,
    addParamToUrl,
    getUrlWithoutParams,
    getParamObj,
    getParamValueByName,
    deleteUrlParamByName,
} from '../util/urlUtil.js'

console.log(paramObjToQueryString({ a: 'xx', b: 'yyy', c: 'zzz' }))
// "?a=xx&b=yyy&c=zzz"

console.log(addParamObjToUrl("https://www.baidu.com/s?ie=UTF-8&wd=localstorage", { test: 111 }))
// "https://www.baidu.com/s?ie=UTF-8&wd=localstorage&test=111"
console.log(addParamObjToUrl("https://www.baidu.com/s", { test: 111, test2: 222 }))
// "https://www.baidu.com/s?test=111&test2=222"

console.log(addParamToUrl("https://www.baidu.com/s?ie=UTF-8&wd=localstorage", "test", 111))
// "https://www.baidu.com/s?ie=UTF-8&wd=localstorage&test=111"
console.log(addParamToUrl("https://www.baidu.com/s", "test", 111))
// "https://www.baidu.com/s?test=111"

console.log(getUrlWithoutParams("https://www.baidu.com/s?ie=UTF-8&wd=localstorage"))
// "https://www.baidu.com/s"

console.log(getParamObj("https://www.baidu.com/s?ie=UTF-8&wd=localstorage"))
// {ie: "UTF-8", wd: "localstorage"}

console.log(getParamValueByName("https://www.baidu.com/s?ie=UTF-8&wd=localstorage", "wd"))
// "localstorage"

console.log(deleteUrlParamByName("https://www.baidu.com/s?ie=UTF-8&wd=localstorage", "ie"))
// "https://www.baidu.com/s?wd=localstorage"

补充

拼接搜索条件 {a: 'xx', b: 'yyy', c: 'zzz'}?a=xx&b=yyy&c=zzz

// {a: 'xx', b: 'yyy', c: 'zzz'} => ?a=xx&b=yyy&c=zzz (传入空对象会返回空字符串)
paramObjToQueryString(paramObj) {
    // 默认约定搜索条件都是字符串
    let queryStr = ''
    Object.entries(paramObj).forEach((item, index) => {
        // 可以在这里对参数做一些过滤 => 如果参数没有值,就不拼上去
        // if (item[1] === '') {
        //     return false
        // }

        // 根据第一位是不是 "?" 来决定如何拼接
        if (queryStr[0] != '?') {
            queryStr = `?${item[0]}=${item[1]}`
        } else {
            queryStr = queryStr + `&${item[0]}=${item[1]}`
        }
    })
    // console.log(queryStr, 'paramObjToQueryString queryStr')
    return queryStr
}

高级用法

// 只保留有值的搜索条件,拼接成 ?a=xx&b=yyy&c=zzz (传入空对象会返回空字符串)
paramObjToQueryString(paramObj) {
    // 默认约定搜索条件都是字符串
    let queryStr = ''
    Object.entries(paramObj).forEach((item, index) => {
        // 可以在这里对参数做一些过滤 => 如果参数没有值,就不拼上去
        // if (item[1] === '') {
        //     return false
        // }

        // 根据第一位是不是 "?" 来决定如何拼接
        if (queryStr[0] != '?') {
            queryStr = `?${item[0]}=${item[1]}`
        } else {
            queryStr = queryStr + `&${item[0]}=${item[1]}`
        }
    })
    // console.log(queryStr, 'paramObjToQueryString queryStr')
    return queryStr
}


// 按搜索条件搜索地块
searchDikuai(paramObj) {
    // { region, searchValue, minValue, maxValue, industry }
    console.log(paramObj, 'paramObj')
    let that = this
    wx.request({
        url: urlList.searchDikuai + this.paramObjToQueryString(paramObj),
        method: "GET",
        // header: {
        //   'content-type': 'application/x-www-form-urlencoded'
        // },
        success(res) {
            console.log(res, 'searchDikuai res')
            if (res.data.msg == '请求成功') {
                let data = res.data.data
                // console.log(data, 'searchDikuai data')
                that.setData({
                    listData: data
                })
            }
        },
        fail(err) {
            console.log(err, 'err')
        }
    })
},


   
    // 调用搜索方法
    this.searchDikuai({
        regional: regional,
        searchValue: searchValue,
        minValue: minValue,
        maxValue: maxValue,
        industry: industry,
    })
原文地址:https://www.cnblogs.com/suwanbin/p/14779150.html