1 防抖
<script>
function input(event) {
const value = event.target.value
request(value)
}
input = debounce(input, 300)
function request(data) {
console.log("请求发送的值", data)
}
function debounce(fn, delay = 200) {
let timeout = null
return function (...args) {
if (timeout) {
clearTimeout(timeout)
timeout = null
} else {
fn.apply(this, args)
}
timeout = setTimeout(() => {
fn.apply(this, args)
}, delay)
}
}
document.querySelector(".input").oninput = input
</script>
2 节流
function thorttle(fn, time) {
let pre = 0
let timeout = null
return function (...args) {
const now = Date.now()
if (now - pre > time) {
pre = now
fn.apply(this, args)
} else {
if (timeout) {
if (timeout) {
clearTimeout(timeout)
timeout = null
}
timeout = setTimeout(() => {
pre = now
fn.apply(this, args)
})
}
}
}
}
let conunt = 1
function scrollFn() {
console.log("监听页面的滚动", conunt++)
}
const newFn = thorttle(scrollFn, 300)
document.onscroll = newFn
3数组对象去重
const arr = [
{ name: "小明" },
{ name: "小红" },
{ name: "小红" },
{ name: "小红" },
]
const obj = {}
const newArr = []
for (let i = 0
if (!obj[arr[i].name]) {
//这边判断属性值是true,就不向数组中添加对象了,代表是重复的
newArr.push(arr[i])
obj[arr[i].name] = true
console.log(obj) //{小明:true,小红:true}
}
}
console.log(newArr)
4深拷贝
const cloneData = (data) => {
const newData = Array.isArray(data) ? [] : {}
for (let key in data) {
if (data[key] && typeof data[key] === "object") {
newData[key] = cloneData(data[key])
} else {
console.log("key", key)
newData[key] = data[key]
}
}
return newData
}