前言
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...