function deepClone(obj) {
if (typeof obj !== 'object') return obj
let temp = Array.isArray(obj) ? [] : {}
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
temp[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]
}
}
return temp
}
function typeOf(obj) {
return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()
}
console.log(typeOf(new Set()))
const arr = [1, 1, 3, 5, 5, 7]
const uniqueArr = arr => [...new Set(arr)]
function unique(arr) {
return arr.filter((item, index, array) => array.indexOf(item) === index)
}
console.log(uniqueArr(arr))
console.log(unique(arr))
const list = [1, [2, 3, [7, 8, [9, 10]]], 4]
console.log(list.flat(Infinity))
const flatArr = arr => {
let result = []
arr.forEach(item => {
if (!Array.isArray(item)) {
result.push(item)
} else {
result = result.concat(flatArr(item))
}
})
return result
}
console.log(flatArr(list))
function parseParam(url) {
const paramsStr = /.+\?(.+)$/.exec(url)[1];
const paramArr = paramsStr.split('&')
let paramsObj = {}
paramArr.forEach(param=>{
if(/=/.test(param)){
let [key,value] = param.split('=')
value = decodeURIComponent(value)
value = /\d+$/.test(value)? parseFloat(value):value
if(paramsObj.hasOwnProperty(key)){
paramsObj[key]= [].concat(paramsObj[key],value)
}else{
paramsObj[key]= value
}
}else{
paramsObj[param] = true
}
})
return paramsObj
}
const url = 'www.baidu.com?15156265&xxxxx&zzzzz&user=zhangsan&age=15'
console.log(parseParam(url))
function debounce(fn,wait,immediate){
const timer = null
const result = null
const debounced = function(){
const args = arguments
const context = this
if(immediate){
const callNow = !timer
setTimeout(()=>{
timer = null
})
if(callNow){
result= fn.apply(context,args)
}
}else{
timer= setTimeout(()=>{
fn.apply(context,args)
})
}
}
debounced.cancel= function(){
if(timer) clearTimeout(timer)
timer =null
}
return debounced
}
console