电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JavaScript手寫數組的常用函數總結

瀏覽:83日期:2023-06-14 15:27:24
前言

在開發過程中,我們常常使用數組的一些 api 相關操作,其中包含 forEach 、 filter 、 find 、 findIndex 、 map 、 some 、 every 、 reduce 、 reduceRight 等函數方法。

今天,我們試試手寫這些函數,實現數組這些函數方法。為了方便,直接在數組原型對象 prototype 上擴展。

本文 Githab 已上傳,更多往期文章已分類整理。

正文

參數說明

callbackFn 回調函數

thisArg 執行 callbackFn 時使用的 this 值

currentValue 數組中正在處理的元素

index 當前索引

array 源數組

accumulator 累加器

initialValue reduce reduceRight 第一次調用 callbackFn 函數時的第一個參數的值默認值

element 自己實現的 this 對象

forEach 函數

語法: arr.forEach(callbackFn(currentValue [, index [, array]])[, thisArg])

方法功能: 對數組的每個元素執行一次給定的函數。

返回:undefined。

自定義函數:myForEach。

Array.prototype.myForEach = function(callbackFn, thisArg) { if (typeof callbackFn !== ’function’) throw (’callbackFn參數必須是函數’); let element = this, len = element && element.length || 0; if (!thisArg) thisArg = element; for (let index = 0; index < len; index++) { callbackFn.call(thisArg, element[index], index, element); }};filter 函數

語法: var newArray = arr.filter(callbackFn(currentValue[, index[, array]])[, thisArg])

方法功能: 創建一個新數組, 其包含通過所提供函數實現的測試的所有元素。

返回:一個新的、由通過測試的元素組成的數組,如果沒有任何數組元素通過測試,則返回空數組。

自定義函數:myFilter。

Array.prototype.myFilter = function(callbackFn, thisArg) { if (typeof callbackFn !== ’function’) throw (’callbackFn參數必須是函數’); let element = this, len = element && element.length || 0, result = []; if (!thisArg) thisArg = element; for (let index = 0; index < len; index++) { if (callbackFn.call(thisArg, element[index], index, element)) result.push(element[index]); } return result;};find 函數

語法: arr.find(callbackFn[, thisArg])

方法功能: 返回數組中滿足提供的測試函數的第一個元素的值。否則返回 undefined。

返回:數組中第一個滿足所提供測試函數的元素的值,否則返回 undefined。

自定義函數:myFind。

Array.prototype.myFind = function(callbackFn, thisArg) { if (typeof callbackFn !== ’function’) throw (’callbackFn參數必須是函數’); let element = this, len = element && element.length || 0; if (!thisArg) thisArg = element; for (let index = 0; index < len; index++) { if (callbackFn.call(thisArg, element[index], index, element)) { return element[index]; } } return}findIndex 函數

語法: arr.findIndex(callbackFn[, thisArg])

方法功能: 返回數組中滿足提供的測試函數的第一個元素的值。否則返回 undefined。

返回:數組中通過提供測試函數的第一個元素的索引。否則,返回-1。

自定義函數:myFindIndex。

Array.prototype.myFindIndex = function(callbackFn, thisArg) { if (typeof callbackFn !== ’function’) throw (’callbackFn參數必須是函數’); let element = this, len = element && element.length || 0; if (!thisArg) thisArg = element; for (let index = 0; index < len; index++) { if (callbackFn.call(thisArg, element[index], index, element)) return index; } return -1;}fill函數

語法: arr.fill(value[, start[, end]])

方法功能: 用一個固定值填充一個數組中從起始索引到終止索引內的全部元素。不包括終止索引。

返回:返回替換的值,原數組發生改變。

自定義函數:myFill。

Array.prototype.myFill = function(value, start = 0, end) { let element = this, len = element && element.length || 0; end = end || len; let loopStart = start < 0 ? 0 : start, // 設置循環開始值 loopEnd = end >= len ? len : end; // 設置循環結束值 for (; loopStart < loopEnd; loopStart++) { element[loopStart] = value; } return element;}map 函數

語法: var new_array = arr.map(function callbackFn(currentValue[, index[, array]]) {// Return element for new_array }[, thisArg])

方法功能: 創建一個新數組,其結果是該數組中的每個元素是調用一次提供的函數后的返回值。

返回:測試數組中是不是至少有1個元素通過了被提供的函數測試。它返回的是一個Boolean類型的值。 一個由原數組每個元素執行回調函數的結果組成的新數組。

自定義函數:myMap。

Array.prototype.myMap = function(callbackFn, thisArg) { if (typeof callbackFn !== ’function’) throw (’callbackFn參數必須是函數’); let element = this, len = element && element.length || 0, result = []; if (!thisArg) thisArg = element; for (let index = 0; index < len; index++) { result[index] = callbackFn.call(thisArg, element[index], index, element); } return result;}some 函數

語法: arr.some(callbackFn(currentValue[, index[, array]])[, thisArg])

方法功能: 測試數組中是不是至少有1個元素通過了被提供的函數測試。它返回的是一個Boolean類型的值。

返回:數組中有至少一個元素通過回調函數的測試就會返回true;所有元素都沒有通過回調函數的測試返回值才會為false。

自定義函數:mySome。

Array.prototype.mySome = function(callbackFn, thisArg) { if (typeof callbackFn !== ’function’) throw (’callbackFn參數必須是函數’); let element = this, len = element && element.length || 0; if (!thisArg) thisArg = element; for (let index = 0; index < len; index++) { if (callbackFn.call(thisArg, element[index], index, element)) return true; } return false;}every 函數

語法: arr.every(callbackFn(currentValue[, index[, array]])[, thisArg])

方法功能 :測試一個數組內的所有元素是否都能通過某個指定函數的測試。它返回一個布爾值。

返回:如果回調函數的每一次返回都為 true 值,返回 true,否則返回 false。

自定義函數:myEvery。

Array.prototype.myEvery = function(callbackFn, thisArg) { if (typeof callbackFn !== ’function’) throw (’callbackFn參數必須是函數’); let element = this, len = element && element.length || 0; if (!thisArg) thisArg = element; for(let index = 0; index < len; index++) { if (!callbackFn.call(thisArg, element[index], index, element)) return false; } return true;}reduce 函數

語法: arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

方法功能: 對數組中的每個元素執行一個由您提供的reducer函數(升序執行),將其結果匯總為單個返回值。

返回:函數累計處理的結果。

自定義函數:myReduce。

Array.prototype.myReduce = function(callbackFn, initialValue) { if (typeof callbackFn !== ’function’) throw (’callbackFn參數必須是函數’); let element = this, len = element.length || 0, index = 0, result; if (arguments.length >= 2) { result = arguments[1]; } else { while (index < len && !(index in element)) index++; if (index >= len) throw new TypeError(’Reduce of empty array ’ + ’with no initial value’); result = element[index++]; } while (index < len) { if (index in element) result = callbackFn(result, element[index], index, element); index++; } return result;}reduceRight 函數

語法: arr.reduceRight(callback(accumulator, currentValue[, index[, array]])[, initialValue])

方法功能: 接受一個函數作為累加器(accumulator)和數組的每個值(從右到左)將其減少為單個值。

返回:執行之后的返回值。

自定義函數:myReduceRight。

Array.prototype.myReduceRight = function(callbackFn, initialValue) { if (typeof callbackFn !== ’function’) throw (’callbackFn參數必須是函數’); let element = this, len = element.length || 0, index = len - 1, result; if (arguments.length >= 2) { result = arguments[1]; } else { while (index >= 0 && !(index in element)) { index--; } if (index < 0) { throw new TypeError(’reduceRight of empty array with no initial value’); } result = element[index--]; } for (; index >= 0; index--) { if (index in element) { result = callbackFn(result, element[index], index, element); } } return result;}最后

到此這篇關于JavaScript手寫數組常用函數總結的文章就介紹到這了,更多相關JS手寫數組常用函數內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 上海瑶恒实业有限公司|消防泵泵|离心泵|官网 | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | 开业庆典_舞龙舞狮_乔迁奠基仪式_开工仪式-神挚龙狮鼓乐文化传媒 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | 氧化锆陶瓷_氧化锆陶瓷加工_氧化锆陶瓷生产厂家-康柏工业陶瓷有限公司 | 免费分销系统 — 分销商城系统_分销小程序开发 -【微商来】 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 卷筒电缆-拖链电缆-特种柔性扁平电缆定制厂家「上海缆胜」 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 上海网站建设-上海网站制作-上海网站设计-上海做网站公司-咏熠软件 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 宏源科技-房地产售楼系统|线上开盘系统|售楼管理系统|线上开盘软件 | 单电机制砂机,BHS制砂机,制沙机设备,制砂机价格-正升制砂机厂家 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 氢氧化钙设备, 氢氧化钙生产线-淄博惠琛工贸有限公司 | YT保温材料_YT无机保温砂浆_外墙保温材料_南阳银通节能建材高新技术开发有限公司 | 无锡门窗-系统门窗-阳光房-封阳台-断桥铝门窗厂[窗致美] | 上海防爆真空干燥箱-上海防爆冷库-上海防爆冷柜?-上海浦下防爆设备厂家? | 接地电阻测试仪[厂家直销]_电缆故障测试仪[精准定位]_耐压测试仪-武汉南电至诚电力设备 | 爆炸冲击传感器-无线遥测传感器-航天星百科 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 真空包装机-诸城市坤泰食品机械有限公司 | 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 水成膜泡沫灭火剂_氟蛋白泡沫液_河南新乡骏华消防科技厂家 | 高压互感器,电流互感器,电压互感器-上海鄂互电气科技有限公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 空气净化器租赁,空气净化器出租,全国直租_奥司汀净化器租赁 | 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 送料机_高速冲床送料机_NC伺服滚轮送料机厂家-东莞市久谐自动化设备有限公司 | 广东护栏厂家-广州护栏网厂家-广东省安麦斯交通设施有限公司 | 深圳VI设计-画册设计-LOGO设计-包装设计-品牌策划公司-[智睿画册设计公司] | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 深圳品牌设计公司-LOGO设计公司-VI设计公司-未壳创意 | 同学聚会纪念册制作_毕业相册制作-成都顺时针宣传画册设计公司 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 |