手写面试题:1.防抖函数,2.节流函数,3.数据扁平化处理函数, 4. 首字母大写转换,5.转化成驼峰表示法

1.防抖函数

      // 防抖: 在一定时间内只执行一次 ,如果在这段时间内再次触发, 将重新计时
      function debounce(fn, delay) {
        let timer = null
        return function () {
          clearTimeout(timer)
          timer = setTimeout(function () {
            fn.apply(this, arguments)
          }, delay)
        }
      }
      btn.addEventListener(
        'click',
        debounce(function () {
          console.log('点击了')
        }, 1000)
      )

2.节流函数

// 在一定时间内只执行一次,如果在这段时间内再次触发, 将被忽略
<button>点击</button>
      function throttle(fn, delay) {
        let timer = null
        return function () {
          if (!timer) {
            timer = setTimeout(function () {
              fn.apply(this, arguments)
              timer = null
            }, delay)
          }
        }
      }
      let btn = document.querySelector('button')
      btn.addEventListener(
        'click',
        throttle(function () {
          console.log('点击了')
        }, 1000)
      )

3.数据扁平化处理函数

      function flat(arr) {
      // arr.reduce 是 ES6 新增的方法,用于数组的迭代 和 归并 功能 ,参数是一个回调函数 ,
      // 参数是一个可选的初始值 ,返回值是一个新的值 ,这个新的值会被当作下一次迭代的参数 ,直到数组的所有元素都被迭代完毕 , 并且返回最终的值。 
        return arr.reduce((prev, curr) => {
          return prev.concat(curr)
        }, [])
      }
      let arr = [
        [1, 2, 3, 4],
        [11, 12, 13]
      ]
      console.log(flat(arr))

4. 编写一个函数,首字母大写转换hello world

function toUpperCase(str) {
        // str.replace 是 ES6 新增的方法,用于字符串的替换功能 ,参数是一个回调函数 ,
        // 参数是一个可选的初始值 ,返回值是一个新的值 ,这个新的值会被当作下一次迭代的参数 ,直到数组的所有元素都被迭代完毕 , 并且返回最终的值。
        return str.replace(/^\w/, (s) => {
          return s.toUpperCase()
        }
        )
      }
      console.log(toUpperCase('hello world')

5. 已知有字符串 foo=”get-element-by-id”,写一个 function 将其 转化成驼峰表示法”getElementById”(必会)

let foo = 'get-element-by-id';
function camelize (str) {
  // str.replace 替换字符串 str 中的所有匹配项 new RegExp(/[-_]([a-z])/g) 为 $1.toUpperCase() 的值  (必会)
  // all,letter 是正则表达式的修饰符,g 是全局匹配,i 是忽略大小写(必会)
  // /-(\w)/g 是正则表达式,\w 是匹配任何单词字符,g 是全局匹配,i 是忽略大小写(必会)
  return str.replace(/-(\w)/g, function (all, letter) {
    return letter.toUpperCase();
  });
}
console.log(camelize(foo));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值