直接上代码
function debounce(callback, delay) {
return function (event) {
console.log('---debounce')
if (callback.timeoutId) {
clearTimeout(callback.timeoutId)
}
callback.timeoutId = setTimeout(() => {
callback.call(event.target, event)
delete callback.timeoutId
}, delay)
}
}
function flat(arr) {
const arr1 = []
arr.forEach((res) => {
if (res.isArray() && res.some((item) => item.isArray())) {
arr1.concat(flat(res))
} else {
arr1.concat(res)
}
})
return arr1
}
function unique2(arr) {
return arr.reduce((acc, item) => {
if (!acc.includes(item)) {
acc.push(item)
}
return acc
}, [])
}
function getType(value) {
return Object.prototype.toString.call(value).slice(8, -1)
}
function kaobei(value) {
const taegetObj = getType(value) === 'Object' ? {} : []
for (const key in value) {
if (Object.hasOwnProperty.call(value, key)) {
const element = value[key]
if (getType(element) === 'Object' || getType(element) === 'Array') {
taegetObj[key] = kaobei(element)
} else {
taegetObj[key] = element
}
}
}
return taegetObj
}
const aa = {
a: { b: { c: 1 } }
}
const bb = kaobei(aa)
bb.a.b.c = 2
console.log(aa)
const namess = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']
const newValue = namess.reduce((acc, item) => {
const count = acc[item] ?? 0
return {
...acc,
[item]: count + 1
}
}, {})