1、将所有的转义字符转成对应的特殊字符

  1. const data = new DOMParser().parseFromString(contentData, 'text/html').body.textContent || '';

2、富文本转纯文本 去除标签

  1. let str = '<div>123</div>'
  2. let words = str.replace(/<[^<>]+>/g, "").replace(/&nbsp;/gi, ""); //这里是去除标签 123
  3. words.replace(/\s/g, "") //这里是去除空格
  4. // 正则去除<br />
  5. let str = str.replace(/<br \/>/g, '');


3、数组去重,并从小到大排序

  1. // 数组去重,并按照从小到大排序
  2. let arr = [1, 1, 2]
  3. arr = Array.from(new Set(arr)); // 去重
  4. arr = arr.sort((a, b) => a - b); // 从小到大排序,arr.sort((a, b) => b - a)则降序

4、防抖

  1. function debounce(fn, delay) {
  2. let timer
  3. return function (...args) {
  4. if (timer) {
  5. clearTimeout(timer)
  6. }
  7. timer = setTimeout(() => {
  8. fn.apply(this, args)
  9. }, delay)
  10. }
  11. }
  12. // 测试
  13. function task() {
  14. console.log('run task')
  15. }
  16. const debounceTask = debounce(task, 1000)
  17. window.addEventListener('scroll', debounceTask)

5、深拷贝

1、JSON方法

  1. // 不支持值为undefined、函数和循环引用的情况
  2. const cloneObj = JSON.parse(JSON.stringify(obj))


2、递归拷贝

  1. function deepClone(obj, cache = new WeakMap()) {
  2. if (obj === null || typeof obj !== 'object') return obj
  3. if (obj instanceof Date) return new Date(obj)
  4. if (obj instanceof RegExp) return new RegExp(obj)
  5. if (cache.has(obj)) return cache.get(obj) // 如果出现循环引用,则返回缓存的对象,防止递归进入死循环
  6. let cloneObj = new obj.constructor() // 使用对象所属的构造函数创建一个新对象
  7. cache.set(obj, cloneObj) // 缓存对象,用于循环引用的情况
  8. for (let key in obj) {
  9. if (obj.hasOwnProperty(key)) {
  10. cloneObj[key] = deepClone(obj[key], cache) // 递归拷贝
  11. }
  12. }
  13. return cloneObj
  14. }
  15. // 测试
  16. const obj = { name: 'Jack', address: { x: 100, y: 200 } }
  17. obj.a = obj // 循环引用
  18. const newObj = deepClone(obj)
  19. console.log(newObj.address === obj.address) // false