1、将所有的转义字符转成对应的特殊字符
const data = new DOMParser().parseFromString(contentData, 'text/html').body.textContent || '';
2、富文本转纯文本 去除标签
let str = '<div>123</div>'
let words = str.replace(/<[^<>]+>/g, "").replace(/ /gi, ""); //这里是去除标签 123
words.replace(/\s/g, "") //这里是去除空格
// 正则去除<br />
let str = str.replace(/<br \/>/g, '');
3、数组去重,并从小到大排序
// 数组去重,并按照从小到大排序
let arr = [1, 1, 2]
arr = Array.from(new Set(arr)); // 去重
arr = arr.sort((a, b) => a - b); // 从小到大排序,arr.sort((a, b) => b - a)则降序
4、防抖
function debounce(fn, delay) {
let timer
return function (...args) {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
fn.apply(this, args)
}, delay)
}
}
// 测试
function task() {
console.log('run task')
}
const debounceTask = debounce(task, 1000)
window.addEventListener('scroll', debounceTask)
5、深拷贝
1、JSON方法
// 不支持值为undefined、函数和循环引用的情况
const cloneObj = JSON.parse(JSON.stringify(obj))
2、递归拷贝
function deepClone(obj, cache = new WeakMap()) {
if (obj === null || typeof obj !== 'object') return obj
if (obj instanceof Date) return new Date(obj)
if (obj instanceof RegExp) return new RegExp(obj)
if (cache.has(obj)) return cache.get(obj) // 如果出现循环引用,则返回缓存的对象,防止递归进入死循环
let cloneObj = new obj.constructor() // 使用对象所属的构造函数创建一个新对象
cache.set(obj, cloneObj) // 缓存对象,用于循环引用的情况
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
cloneObj[key] = deepClone(obj[key], cache) // 递归拷贝
}
}
return cloneObj
}
// 测试
const obj = { name: 'Jack', address: { x: 100, y: 200 } }
obj.a = obj // 循环引用
const newObj = deepClone(obj)
console.log(newObj.address === obj.address) // false