!
也想出现在这里? 联系我们
广告区块

【JavaScript】手撕前端面试题:手写instanceof | 手写Array.map | 手写Array.filter | 手写Array.reduce

 

向大家推荐一款博主一直在用的面试刷题求职网站:牛客网

牛客网不仅具有公司真题专项练习面试题库在线编程等功能,还具有非常强大的AI模拟面试功能,简直是求职者的福音!

牛客网里的题库非常全面的,无论你是前端还是后端,是想要备考还是准备面试又或者是想要提高自己,你都能在牛客网上找到适合自己的题,赶快点击链接去注册登录吧:点击进入牛客网

牛客网 牛客网
【JavaScript】手撕前端面试题:手写instanceof | 手写Array.map | 手写Array.filter | 手写Array.reduce 【JavaScript】手撕前端面试题:手写instanceof | 手写Array.map | 手写Array.filter | 手写Array.reduce

本篇文章所有示例参考自牛客网题库/在线编程/JS篇

1、手写instanceof

要求

补全JavaScript代码,要求以Boolean的形式返回第一个实例参数是否在第二个函数参数的原型链上。

手撕代码

const _instanceof = (target, Fn) => {
// 补全代码
// target实例的类型是object
if(target === null || typeof target !== 'object') {
return false
}
// Object.getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)。
let proto = Object.getPrototypeOf(target);
while(true) {
if(proto === null) return false;
if(proto === Fn.prototype) return true;
// 如果proto !== Fn.prototype,则获取proto的原型重新进行判断(逐渐收缩proto)
proto = Object.getPrototypeOf(proto);
}
}

 

prototypeObject.getPrototypeOf可查阅:MDN的解释

2、手写Array.map

要求

要求实现Array.map函数的功能且该新函数命名为”_map“。

示例:

输入:[1,2]._map(i => i * 2)
输出:[2,4]

 

手撕代码

手写Array.map函数之前先了解一下Array.map

  • Array.map函数接收一个回调函数,该回调函数又能接收三个参数,分别代表:
    • 数组中正在处理的当前元素
    • 数组中正在处理的当前元素的索引
    • 方法调用的数组
  • Array.map函数返回一个新数组,每个元素都是回调函数的返回值
Array.prototype._map=function(cb){
let newArr=[]
let _this=this
for(let i=0;i<_this.length;i++){
newArr.push(cb(this[i],i,_this))
}
return newArr
}

 

3、手写Array.filter

要求

要求实现Array.filter函数的功能且该新函数命名为”_filter“。

示例:

输入:[1,2]._filter(i => i>1)
输出:[2]

 

手撕代码

手写Array.filter函数之前先了解一下Array.filter

  • Array.filter函数接收一个回调函数,该回调函数又能接收三个参数,分别代表:
    • 数组中正在处理的当前元素
    • 数组中正在处理的当前元素的索引
    • 方法调用的数组
  • Array.filter函数返回一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组。
Array.prototype._filter = function(cb) {
let arr = this,newArr =[];
for(let i = 0;i < arr.length;i++) {
if(cb(arr[i],i,arr)) newArr.push(arr[i]);
}
return newArr
}

 

4、手写Array.reduce

要求

补全JavaScript代码,要求实现Array.reduce函数的功能且该新函数命名为”_reduce“。

示例:

输入:[1,2,3]._reduce((left, right) => left + right)
输出:6

 

手撕代码

手写Array.reduce函数之前先了解一下Array.reduce

Array.reduce函数可接收两个参数:一个回调函数callbackFn和初始值initialValue(可选):

  • callbackFn又能接收四个参数:
    • previousValue:上一次调用 callbackFn 时的返回值。在第一次调用时,若指定了初始值 initialValue,其值则为 initialValue,否则为数组索引为 0 的元素 array[0]
    • currentValue:数组中正在处理的元素。在第一次调用时,若指定了初始值 initialValue,其值则为数组索引为 0 的元素 array[0],否则为 array[1]
    • currentIndex:数组中正在处理的元素的索引。若指定了初始值initialValue,则起始索引号为 0,否则从索引 1 起始。
    • array:用于遍历的数组。
  • initialValue (可选)作为第一次调用 callbackFn函数时参数 previousValue 的值。若指定了初始值 initialValue,则 currentValue 则将使用数组第一个元素;否则 previousValue 将使用数组第一个元素,而 currentValue 将使用数组第二个元素。
Array.prototype._reduce = function(cb,initialValue) {
if(typeof cb !== 'function') {
throw new Error(`${cb} is not function`)
}
let arr=this, count, i;
if(initialValue){
count = initialValue;
i = 0;
}else {
count = arr[0];
i = 1;
}
for(i; i < arr.length; i++) {
count = cb(count,arr[i],i,arr)
}
return count
}

 

结语

这篇文章的所有内容都出自于牛客网的JS篇题库: 【JavaScript】手撕前端面试题:手写instanceof | 手写Array.map | 手写Array.filter | 手写Array.reduce

牛客网的JS题库非常贴合实际的,在写的过程查漏补缺能收获了很多,强烈将牛客网推荐给大家!

如果本篇文章对你有所帮助,还请客官一件四连!❤️

基础不牢,地动山摇! 快来和博主一起来牛客网刷题巩固基础知识吧!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/m0_51969330/article/details/127471988

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索