forEach
主要用于数组的简单遍历,基本使用如下
arr = [1, 2, 3, 4]
arr.forEach((val, index) => {
console.log(val, index)
})
// 相当于原来的for循环
for (var i = 0; i console.log(arr[i], i) } 判断调用函数的 判断传入的回调函数是否合法 模拟具体功能 Array.prototype.myForEach = function (callbackFn) { // 判断this是否合法 if (this === null || this === undefined) { throw new TypeError(“Cannot read property ‘myForEach’ of null”); } // 判断callbackFn是否合法 if (Object.prototype.toString.call(callbackFn) !== “[object Function]”) { throw new TypeError(callbackFn + ’ is not a function’) } // 取到执行方法的数组对象和传入的this对象 var _arr = this, thisArg = arguments[1] || window; for (var i = 0; i<_arr.length; i++) { // 执行回调函数 callbackFn.call(thisArg, _arr[i], i, _arr); } } const users = [ { name: ‘John’, age: 34 }, { name: ‘Amy’, age: 20 }, { name: ‘camperCat’, age: 10 } ]; // 需求:取出users所有人的name,并存放在新数组中 // 不使用map names = [] for (var i = 0; i names.push(users[i].name) } // map是对数组的每一个元素进行操作,因此上述代码可以使用map来进行简化 names = users.map(function (user) { return user.name }) // 如果学过箭头函数,还可以进一步简化 names = user.map(user => user.name) 有了上面 Array.prototype.myMap = function(callbackFn) { var _arr = this, thisArg = arguments[1] || window, res = []; for (var i = 0; i<_arr.length; i++) { // 存储运算结果 res.push(callbackFn.call(thisArg, _arr[i], i, _arr)); } return res; } // 返回偶数 arr = [1, 2, 3, 4, 5]; arr.filter(val => val % 2 == 0) 与 Array.prototype.myFilter = function(callbackFn) { var _arr = this, thisArg = arguments[1] || window, res = []; for (var i = 0; i<_arr.length; i++) { // 回调函数执行为true if (callbackFn.call(thisArg, _arr[i], i, _arr)) { res.push(_arr[i]); } } return res; } arr = [1, 3, 5, 7, 8, 9] // false,8为偶数,不满足 arr.every(ele => ele % 2 == 1) arr2 = [2, 4, 6] // true 都是偶数 arr2.every(ele => ele % 2 == 0) Array.prototype.myEvery = function(callbackFn) { var _arr = this, thisArg = arguments[1] || window; // 开始标识值为true // 遇到回调返回false,直接返回false // 如果循环执行完毕,意味着所有回调返回值为true,最终结果为true var flag = true; for (var i = 0; i<_arr.length; i++) { // 回调函数执行为false,函数中断 if (!callbackFn.call(thisArg, _arr[i], i, _arr)) { return false; } } return flag; } Array.prototype.mySome = function(callbackFn) { var _arr = this, thisArg = arguments[1] || window; // 开始标识值为false // 遇到回调返回true,直接返回true // 如果循环执行完毕,意味着所有回调返回值为false,最终结果为false var flag = false; for (var i = 0; i<_arr.length; i++) { // 回调函数执行为false,函数中断 if (callbackFn.call(thisArg, _arr[i], i, _arr)) { return true; } } return flag; } const users = [ { name: ‘John’, age: 34 }, { name: ‘Amy’, age: 20 }, { name: ‘camperCat’, age: 10 } ]; 在没有find方法时,实现类似效果,需要循环遍历,查找到name=Jonn后,找到年龄。但使用find就可以轻松快捷的实现。 JohnAge = users.find(user => user.name === ‘John’).age ES6以前Array提供了查找数组中元素的方法:indexOf,lastIndexOf,但是这两个方法在查找对象时都无能为力。 // 返回值为-1,说明未查到Amy users.indexOf({ name: ‘Amy’, age: 20 }) // 返回hi为1,成功查到Amy users.findIndex(user => user.name === ‘Amy’) indexOf虽然可以用来查找基本类型的元素索引,但其语义化并不好,每次需要与-1进行比较,因此ES6添加了新的includes方法。 Array.prototype.myFind = function(callbackFn) { var _arr = this, thisArg = arguments[1] || window; // 遇到回调返回true,直接返回该数组元素 // 如果循环执行完毕,意味着所有回调返回值为false,最终结果为undefined for (var i = 0; i<_arr.length; i++) { // 回调函数执行为false,函数中断 if (callbackFn.call(thisArg, _arr[i], i, _arr)) { return _arr[i]; } 自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。 深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。 因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门! 如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!! 由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新! [外链图片转存中…(img-VRv2B9ZX-1714910625906)] [外链图片转存中…(img-BhgzTlaN-1714910625907)] [外链图片转存中…(img-vEEKVInj-1714910625907)] 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门! 如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!! 由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!模拟实现
this
是否合法map
用法
map
函数对数组的每个元素执行回调函数,并返回含有运算结果的新数组,基本使用如下:模拟实现
forEach
的编写经验,map
只需要稍作修改,使其结果返回新的数组(这里省略掉异常判断)。filter
用法
filter
是过滤的意思,它对数组每个元素执行回调函数,返回回调函数执行结果为true
的元素。模拟实现
map
的实现大同小异,map
返回执行回调后所有的元素,而filter
只返回执行结果为true
的元素。every
用法
every
并不返回数组,返回布尔值true/false
,数组的每个元素执行回调函数,如果执行结果全为true
,every
返回true
,否则返回false
。模拟实现
some
用法
some
与every
功能类似,都是返回布尔值。只要回调函数结果有一个true
,some
便返回true
,否则返回false
。模拟实现
find/findIndex
用法
find
与findIndex
是ES6
新添加的数组方法,返回满足回调函数的第一个数组元素/数组元素索引。当数组中没有能满足回调函数的元素时,会分别返回undefined和-1
。
模拟实现
find/findIndex
都是寻找到第一个满足回调函数的元素返回,上面我们学习的some
也是类似机制,因此它们的原生代码类似。最后
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**