前言

1、办法阐明

办法作用
URLSearchParams.append()插入一个指定的键/值对作为新的搜寻参数。
URLSearchParams.delete()从搜寻参数列表里删除指定的搜寻参数及其对应的值。
URLSearchParams.entries()返回一个iterator能够遍历所有键/值对的对象。
URLSearchParams.get()获取指定搜寻参数的第一个值。
URLSearchParams.getAll()获取指定搜寻参数的所有值,返回是一个数组。
URLSearchParams.has()返回 Boolean 判断是否存在此搜寻参数。
URLSearchParams.keys()返回iterator 此对象蕴含了键/值对的所有键名。
URLSearchParams.set()设置一个搜寻参数的新值,如果原来有多个值将删除其余所有的值。
URLSearchParams.sort()按键名排序。
URLSearchParams.toString()返回搜寻参数组成的字符串,可间接应用在URL上。
URLSearchParams.values()返回iterator 此对象蕴含了键/值对的所有值。

2、实现代码

class MyURLSearchParams {    /**     * @params {string} init     */    constructor(init) {     this.val=''        if(init.indexOf('http')>-1){            this.val=init        }else{            this.val=init.slice(init.indexOf('?')+1)        }        this.arr=this.val.split('&')        // console.log(this.val);    }        /**      * @params {string} name     * @params {any} value     */    append(name, value) {      let tmp=name+'='+value      this.arr.push(tmp)      return '?'+this.arr.join('&')    }        /**     * @params {string} name     */    delete(name) {        let res=[]        for(let i=0; i<this.arr.length; i++) {            if(this.arr[i].indexOf(name)!=0){                res.push(this.arr[i])            }        }        this.arr=res        return '?'+this.arr.join('&')    }        /**     * @returns {Iterator}      */    *entries() {        let res=[]        for(let i=0; i<this.arr.length; i++) {            let tmp=this.arr[i].split('=')            yield [tmp[0],tmp[1]]        }    }        /**     * @param {(value, key) => void} callback     */    forEach(callback) {        for(let i=0; i<this.arr.length; i++) {            let tmp=this.arr[i].split('=')            let obj={}            callback(tmp[1],tmp[0])        }    }    /**     * @param {string} name     * returns the first value of the name     */    get(name) {      let res=null      this.arr.filter((value) => {          if((res==null)&&(value.indexOf(name)==0)){              let tmp=value.split('=')              res=tmp&&tmp[1]          }      })      return res    }    /**     * @param {string} name     * @return {string[]}     * returns the value list of the name     */    getAll(name) {        let res=[]        this.arr.filter((value) => {            if(value.indexOf(name)==0){                let tmp=value.split('=')                res.push(tmp[1])            }        })        return res    }        /**     * @params {string} name     * @return {boolean}     */    has(name) {        let res=false        this.arr.filter((value) => {            if((res==false)&&(value.indexOf(name)==0)){                let tmp=value.split('=')                res=tmp.length>0?true:false            }        })        return res    }    /**     * @return {Iterator}     */    keys() {        let res=[]        for(let i=0; i<this.arr.length; i++) {            let tmp=this.arr[i].split('=')            if(!res.includes(tmp[0])){                res.push(tmp[0])            }        }        return res    }        /**     * @param {string} name     * @param {any} value     */    set(name, value) {        let tmp=0        for(let i=0; i<this.arr.length; i++) {            if(this.arr[i].indexOf(name)==0){              tmp+=1                this.arr[i]=name+'='+value            }        }        if(tmp==0){            this.arr.push(name+'='+value)        }        return '?'+this.arr.join('&')    }        // sor all key/value pairs based on the keys    sort() {        let res=[]        for(let i=0; i<this.arr.length; i++) {            let tmp=this.arr[i].split('=')            res.push(tmp)        }        res.sort(function(a,b){            if(a[0]>b[0]){                return 1            }else{                return -1            }          }        )        let sum=[]        res.forEach((value) => {            sum.push(value.join('='))        })        this.arr=sum        return res    }        /**     * @return {string}     */    toString() {      return this.arr.join('&')    }    /**     * @return {Iterator} values     */    values() {        let res=[]        for(let i=0; i<this.arr.length; i++) {            let tmp=this.arr[i].split('=')            if(!res.includes(tmp[0])){                res.push(tmp[1])            }        }        return res    }  }

参考链接

https://developer.mozilla.org...