思路:
&永远会比=少,先取第一个=的下标存到数组中。
然后再继续找所有&的下标存到数组中(&不太会出现在val中,所以这里是以&为标准)。
再寻找所有出现在&后第一个=,并将其存到之前放=的数组中。
获取到了他们的下标后就好办事了,下面的看代码就行。
直接套用此方法即可
不是很简洁,可以看思路,有更好的方法可以评论告诉我,或者将博客地址发我!
urlDecode(url) { //传入参数格式为url中"?"后面部分
console.log(url);
let dIndex = [], yIndex = []; //建立两个空数组存放查询的=和&在字符串中的下标
dIndex.push(url.search("=")) //先将第一个=下标插入进去
for(let i = 0; i < url.length; i++) { //循环url字符串
if(url[i] == "&") { //查询&
yIndex.push(i); //先将所有&下标存到数组中
for(let j = 0; j < url.length; j++) { //当查询到&后,再次循环url
if(url[j] == "=" && j > i) { //寻找在&后面的第一个=的下标
dIndex.push(j); //将其插入进存放=的数组中
break; //找到第一个后就立刻跳出循环
}
}
}
}
let val = []; //存放所有=至&之间的数据
for(let i = 0; i < dIndex.length; i++) { //以为=肯定会比&多,所以循环=这个数组
val.push(url.slice(dIndex[i]+1, yIndex[i])); //截取url,两个数组中存放的下标一一对应截取
}
console.log(val, dIndex, yIndex)
let key = []; //存放key
key.push(url.slice(0, dIndex[0])); //先将第一个key存入数组中
dIndex.splice(0, 1); //再将第一个key删除
for(let i = 0; i < yIndex.length; i++) { //这个随便用上面哪两个数组的循环都可,因为现在的length都一样
key.push(url.slice(yIndex[i]+1, dIndex[i])); //截取剩余所有的key
}
console.log(key, val, dIndex, yIndex);
let obj = {}; //创建空对象,存放数据
for(let i = 0; i < val.length; i++) { //循环哪一个都行,length都一样
obj[key[i]] = val[i]; //将数据插入到对象中
}
console.log(obj, key, val, dIndex, yIndex);
}

被折叠的 条评论
为什么被折叠?



