当前位置:首页 > 科技  > 软件

十个可以手动编写的 JavaScript 数组 API

来源: 责编: 时间:2023-08-05 11:44:30 2792观看
导读JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参数回调函数,并在回调函数中接收三个参数,分别

JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。CuS28资讯网——每日最新资讯28at.com

CuS28资讯网——每日最新资讯28at.com

现在开始吧。CuS28资讯网——每日最新资讯28at.com

1.forEach()

forEach()用于遍历数组接收一参数回调函数,并在回调函数中接收三个参数,分别代表每一项的值、下标和数组本身。CuS28资讯网——每日最新资讯28at.com

为了确保数组可以访问我们自己手写的API,它必须链接到数组的原型。CuS28资讯网——每日最新资讯28at.com

代码:CuS28资讯网——每日最新资讯28at.com

const arr = [ { name: 'zt', age: 18 }, { name: 'aa', age: 19 }, { name: 'bb', age: 18 }, { name: 'cc', age: 21 },]//CodeArray.prototype.my_forEach = function (callback) { for (let i = 0; i < this. length; i++) { callback(this[i], i, this) }}//verifyarr.my_forEach((item, index, arr) => { //111 111 if (item. age === 18) { item.age = 17 return } console.log('111');})

2. map()

map()也用于数组遍历,与forEach不同的是,它会返回一个新数组,这个新数组由回调函数map返回值接收。CuS28资讯网——每日最新资讯28at.com

代码:CuS28资讯网——每日最新资讯28at.com

const arr = [ { name: 'zt', age: 18 }, { name: 'aa', age: 19 }, { name: 'bb', age: 18 }, { name: 'cc', age: 21 },]Array.prototype.my_map=function(callback){ const res=[] for(let i=0;i{ if(item.age>18){ return item }})console. log(newarr);//[ // undefined, // { name: 'aa', age: 19 }, // undefined, // { name: 'cc', age: 21 }//]

3. filter()

filter()用于过滤满足条件的元素,并返回一个新数组。CuS28资讯网——每日最新资讯28at.com

代码:CuS28资讯网——每日最新资讯28at.com

const arr = [ { name: 'zt', age: 18 }, { name: 'aa', age: 19 }, { name: 'bb', age: 18 }, { name: 'cc', age: 21 },]Array.prototype.my_filter = function (callback) { const res = [] for (let i = 0; i < this. length; i++) { callback(this[i], i, this) && res. push(this[i]) } return res}//verifylet newarr = arr.my_filter((item, index, arr) => { return item. age > 18})console.log(newarr); [ { name: 'aa', age: 19 }, { name: 'cc', age: 21 } ]

4. reduce()

reduce()用于将数组中的所有元素按照指定的规则进行合并计算,并返回一个最终值。CuS28资讯网——每日最新资讯28at.com

reduce() 接收两个参数:回调函数、初始值(可选)。CuS28资讯网——每日最新资讯28at.com

回调函数中接收有四个参数:初始值或者存放最后一个回调函数的返回值、每一项的值、下标、数组本身。CuS28资讯网——每日最新资讯28at.com

如果没有提供初始值,则从第二项开始,将第一个值作为第一次执行的返回值。CuS28资讯网——每日最新资讯28at.com

代码:CuS28资讯网——每日最新资讯28at.com

const arr = [ { name: 'zt', age: 18 }, { name: 'aa', age: 19 }, { name: 'bb', age: 18 }, { name: 'cc', age: 21 },]Array.prototype.my_reduce = function (callback,...arg) { let pre,start=0 if(arg.length){ pre=arg[0] } else{ pre=this[0] start=1 } for (let i = start; i < this.length; i++) { pre=callback(pre,this[i], i, this) } return pre}//verifyconst sum = arr.my_reduce((pre, current, index, arr) => { return pre+=current.age},0) console.log(sum); //76

5. fill()

fill() 用于填充数组的所有元素,它会影响原始数组,返回原始数组的修改值。CuS28资讯网——每日最新资讯28at.com

fill() 接收三个参数:填充值、起始位置(默认为 0)、结束位置(默认为 this.length-1)。CuS28资讯网——每日最新资讯28at.com

左闭右开灌装原理CuS28资讯网——每日最新资讯28at.com

当使用起始位置和结束位置时,它们默认填充整个数组。CuS28资讯网——每日最新资讯28at.com

代码:CuS28资讯网——每日最新资讯28at.com

Array.prototype.my_fill = function (value,start,end) { if(!start&&start!==0){ start=0 } end=end||this.length for(let i=start;i ]6. includes()

想法:CuS28资讯网——每日最新资讯28at.com

include()用于判断数组中是否存在元素,返回值true或falseCuS28资讯网——每日最新资讯28at.com

include() 提供第二个参数支持指定位置开始查找CuS28资讯网——每日最新资讯28at.com

代码:CuS28资讯网——每日最新资讯28at.com

const arr = ['a', 'b', 'c', 'd', 'e']Array.prototype.my_includes = function (item,start) { if(start<0){start+=this.length} for (let i = start; i < this. length; i++) { if(this[i]===item){ return true } } return false}//verifyconst flag = arr.my_includes('c',3) //The element to be searched, from which subscript to start searchingconsole.log(flag); //false

6. join()

join() 用于将数组中的所有元素连接成指定符号的一个字符串CuS28资讯网——每日最新资讯28at.com

代码:CuS28资讯网——每日最新资讯28at.com

const arr = ['a', 'b', 'c']Array.prototype.my_join = function (s = ',') { let str = '' for (let i = 0; i < this. length; i++) { str += `${this[i]}${s}` } return str. slice(0, str. length - 1)}//verifyconst str = arr. my_join(' ')console.log(str); //a b c

7. find()

find()用于返回数组中第一个满足条件的元素,找不到元素返回undefined。CuS28资讯网——每日最新资讯28at.com

find()的参数是一个回调函数。CuS28资讯网——每日最新资讯28at.com

代码:CuS28资讯网——每日最新资讯28at.com

const arr = [ { name: 'zt', age: 18 }, { name: 'aa', age: 19 }, { name: 'bb', age: 18 }, { name: 'cc', age: 21 },]Array.prototype.my_find = function (callback) { for (let i = 0; i < this.length; i++) { if(callback(this[i], i, this)){ return this[i] } } return undefined}//verifylet j = arr.my_find((item, index, arr) => { return item.age > 19 })console.log(j); //{ name: 'cc', age: 21 }

8. findIndex()

findIndex()用于返回数组中第一个满足条件的,索引找不到返回-1CuS28资讯网——每日最新资讯28at.com

findIndex()的参数是一个回调函数。CuS28资讯网——每日最新资讯28at.com

代码:CuS28资讯网——每日最新资讯28at.com

const arr = [ { name: 'zt', age: 18 }, { name: 'aa', age: 19 }, { name: 'bb', age: 18 }, { name: 'cc', age: 21 },]Array.prototype.my_findIndex = function (callback) { for (let i = 0; i < this.length; i++) { if(callback(this[i], i, this)){ return i } } return -1}let j = arr.my_findIndex((item, index, arr) => { return item.age > 19})console.log(j); //3

9. some()

元素 some() 用于检查数组中指定的条件是否满足。CuS28资讯网——每日最新资讯28at.com

如果有一个元素满足条件,则返回 true,并且不会再检查后面的元素。CuS28资讯网——每日最新资讯28at.com

代码:CuS28资讯网——每日最新资讯28at.com

const arr = [ { name: 'zt', age: 18 }, { name: 'aa', age: 19 }, { name: 'bb', age: 18 }, { name: 'cc', age: 21 },]Array.prototype.my_some = function (callback) { for (let i = 0; i < this. length; i++) { if(callback(this[i], i, this)){ return true } } return false}//verifyconst flag = arr.some((item, index, arr) => { return item. age > 20})console.log(flag); //true

10. every()

every() 用于检查所有元素是否都满足指定条件。CuS28资讯网——每日最新资讯28at.com

如果有一个条件不满足,则返回 false,后面的元素不会再执行。CuS28资讯网——每日最新资讯28at.com

代码:CuS28资讯网——每日最新资讯28at.com

const arr = [ { name: 'zt', age: 18 }, { name: 'aa', age: 19 }, { name: 'bb', age: 18 }, { name: 'cc', age: 21 },]Array.prototype.my_every = function (callback) { for (let i = 0; i < this.length; i++) { if(!callback(this[i], i, this)){ return false } } return true}//verifyconst flag = arr.my_every((item, index, arr) => { return item.age > 16})console.log(flag); //true

写在最后

以上就是我今天想与您分享的10个手动编写的JS数组API的知识内容,如果对您有帮助的话,请记得点赞我,关注我,并将这个知识分享给您的朋友,也许能够帮助到他。CuS28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-76-0.html十个可以手动编写的 JavaScript 数组 API

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: K6:面向开发人员的现代负载测试工具

下一篇: 线程通讯的三种方法!通俗易懂

标签:
  • 热门焦点
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 之家push系统迭代之路

    之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 慕岩炮轰抖音,百合网今何在?

    慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz&ldquo;难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?&rdquo;这一番话,出自百合网联合创
  • 2天涨粉255万,又一赛道在抖音爆火

    2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 大厂卷向扁平化

    大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 2纳米决战2025

    2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想此前宣布,将于11月2日19:30召开联想秋季轻薄新品发布会,推出联想 YOGA 16s 2022 笔记本等新品。官方称,YOGA 16s 2022 笔记本将搭载 16 英寸屏幕,并且是一
  • 电博会与软博会实现

    电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top