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