开发者社区> 小周sir> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

js手写几个常见的面试题

简介: 面试中常见的几道经典题
+关注继续查看

手动实现 Arrar.prototype.map方法

  • map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
function map(arr,mapCallback) {
    首先检测传递的参数是否正确
    if(!Arrar.isArray(arr) || !arr.length || typeof mapCallback !== 'function') {
        return []
    } else {
        let result = [];
        for(let i = 0,len = arr.length;i<len;i++) {
            result.push(mapCallback(arr[i],i,arr))
        }
        return result
    }
}

手动实现Array.prototype.filter方法

  • filter()方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
function filter(arr,filterCallback) {
    if(!Array.isArray(arr) || !arr.length || typeof filterCallback !== 'function') {
        return []
    } else {
        let result = [];
        for (let i=0,len=arr.length;i<len;i++) {
            if(filterCallback(arr[i],i,arr)) {
                result.push(arr[i])
            }
        }
        return result
    }
}

JS的节流和防抖

  • 函数防抖 是指在事件被触发 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。这可以使用在一些点击请求的事件上,避免因为用户的多次点击向后端发送多次请求。

// 函数防抖的实现
function debounce(fn, wait) {
  var timer = null;

  return function() {
    var context = this,
      args = arguments;

    // 如果此时存在定时器的话,则取消之前的定时器重新记时
    if (timer) {
      clearTimeout(timer);
      timer = null;
    }

    // 设置定时器,使事件间隔指定事件后执行
    timer = setTimeout(() => {
      fn.apply(context, args);
    }, wait);
  };
}
  • 函数节流 是指规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。节流可以使用在 scroll 函数的事件监听上,通过事件节流来降低事件调用的频率。
function throttle(fn, delay) {
  var preTime = Date.now();

  return function() {
    var context = this,
      args = arguments,
      nowTime = Date.now();

    // 如果两次时间间隔超过了指定时间,则执行函数。
    if (nowTime - preTime >= delay) {
      preTime = Date.now();
      return fn.apply(context, args);
    }
  };
}

多维数组处理一维数组

export const flatten = (arr) => {
  while (arr.some((item) => Array.isArray(item))) {
    arr = [].concat(...arr)
  }
  return arr
}
例如:
arr = [1,2,3,[22,33,44,[55,66,77,[88,99,100]]]]
flatten(arr)  => [1, 2, 3, 22, 33, 44, 55, 66, 77, 88, 99, 100]

以上就是面试中,最常见的几道题

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
java基础常见面试题
java基础常见面试题
11 0
vue面试中常见的面试题
vue面试中常见的面试题
1278 0
Java常见面试题:抽象类
首先针对抽象类应该有一个核心的认识:抽象类只是一个比普通类多了抽象方法的类而已,其它的结构上和普通类是差不多的。还有一个使用上的区别就是抽象类无法直接使用关键字new进行对象的实例化控制。
2556 0
Java常见面试题:Java内存模型
说到面试和笔试,现在许多公司也明白笔试意义不大,因为很多人会背题,所以大部分情况下都是以面谈为主。面谈中,这两年常会提问:Java的内存划分。
4161 0
Java Spring常见面试题
  问:SpringIOC原理阐述   答:把对象的创建、初始化、销毁等工作交给Spring容器来完成。我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。
6589 0
Sql常见面试题
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/3552370   Sql常见面试题   1.
654 0
+关注
小周sir
面对过去,不要迷离;面对未来,不必彷徨;
73
文章
86
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载