1. 获取url参数
function getUrlParams (url) {
const res = {}
if(url.includes('?')){
const str = url.split('?')[1] //取?号后面部分
const arr = str.split('&') //按=将携带参数分割成数组形式
//遍历数组
arr.forEach(item => {
const key = item.split('=')[0] //取等号前面为键
const val = item.split('=')[1] //取等号后面为值
res[key] = decodeURIComponent(val) //解码,赋值
})
}
return res
}
//测试
let url = 'https://baidu.com?name=zhangsan&age=18'
let res = getUrlParams (url)
console.log(res)
//{ name: 'zhangsan', age: '18'}
2. 数组去重
let arr = [2, 2, 3, 4, 5, 5, 9, 7, 1, 0, 0]
//方式一:Set + 拓展运算符
let newArr = [...new Set(arr)]
console.log(newArr) // [2,3,4,5,9,7,1,0]
//方法二: filter + indexOf
let newArr2 = arr.filter( (item, index) => {
return arr.indexOf(item) === index
})
console.log(newArr2) // [2,3,4,5,9,7,1,0]
//方法三: for循环 + includes
let newArr3 = []
for(let i = 1; i < arr.length; i++){
if(!newArr3.includes(arr[i])){
newArr3.push(arr[i])
}
}
console.log(newArr3) // [2,3,4,5,9,7,1,0]
//方法四: forEach + indexof
function resetArr (arr) {
let res = []
arr.forEach(item => {
if(res.indexOf(item) === -1){
res.push(item)
}
})
return res
}
console.log(resetArr(arr)) // [2,3,4,5,9,7,1,0]
3. 数组扁平化
let arr = [1, [2, 3, [4, 5]], [7, 9]]
方法一:flat
let newArr = arr.flat([Infinity])
console.log(newArr) //[1,2,3,4,5,7,9]
方法二:转字符串 + map(Number)
//map(Number)是将字符串型数组转化成数字型数组
//map(String)是将数字型数组转化成字符串型数组
let newArr2 = arr.toString().split(',').map(Number)
console.log(newArr2) //[1,2,3,4,5,7,9]
方法三:some + concat
function flatDeep(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}
console.log(flatDeep(arr)) //[1,2,3,4,5,7,9]
方法四:reduce
function flatArr (arr) {
return arr.reduce( (pre,next) => {
return pre.concat(Array.isAarray(next) ? flatArr(next) : next)
}, [])
}
console.log(flatArr(arr)) //[1,2,3,4,5,7,9]
4. 深拷贝
let obj = {
a: "b",
c: [1, 4, 6],
d: { f: "e" },
// g: function () {
// console.log('11');
// }
}
let arr = [
{ a: "b" },
{c: "d", e:"f"}
]
//方法一: JSON
let newobj = JSON.parse(JSON.stringify(obj))
let newarr = JSON.parse(JSON.stringify(arr))
//注意事项:对象中若含有方法,如g,则无法被拷贝
//方法二: 递归
function deepClone (obj) {
//先判断传入参数是对象还是数组,然后相应的赋初始值
let res = Array.isArray(obj) ? [] : {}
if(obj && typeOf obj === "object"){
for( const key in obj ) {
if(obj.hasOwnProperty(key)){
//判断对象键有没有自身属性
if(obj[key] && typeOf obj[key] === "object"){
res[key] = deepClone(obj[key])
}else{
res[key] = obj[key]
}
}
}
}
return res
}
let cloneobj = deepClone(obj)
console.log(cloneobj)
let clonearr = deepClone(arr)
console.log(clonearr)
5.冒泡排序
let arr = [3,6,1,5,7,2,0]
//双重for循环
function bubbleSort(arr){
let len = arr.length
for(let i = 1; i < len-1, i++){
for(let j = 1; j < len-1-i; j++){
if(arr[j] > arr[j+1]){
//交换顺序
let temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
return arr
}
console.log(bubbleSort(arr)) //[0,1,2,3,5,6,7]
后面不定期更新中。。。。。。