es6 filter方法_极其有用的JavaScript数组方法,可提高您的编码技能

d1d358dd485dd22ac7bdc8c75dacc594.png

随着ES6的开始,在javascript语言中添加了许多改进以改进javascript编码标准。

今天,我们将看到一系列非常有用的数组方法,这些方法将提高您的编码技能。因此,让我们深入了解它。

数组

Array.of语法如下

Array.of(element0[, element1[, ...[, elementN]]])

有两种在javascript中声明数组的方法,一种是使用数组文字符号[],另一种是使用new关键字

const numbers = new Array(5,10);

上面的代码将创建一个包含两个值5和的数组10。但是如果我们只传递一个值,例如

const numbers = new Array(5);

这将创建一个长度数组,5其值设置undefined为预期值。但是new Array()语法在某些情况下很有用,因此Array.of方法可以解决此问题。

const numbers = Array.of(5);

这将创建一个包含值5而不是5的数字数组,undefined这与new Array(5)的情况相同。

显然,我们可以将多个值传递给这样的Array.of方法

const numbers = Array.of(5, 6, 7, 8);

浏览器支持:

  • 除Internet Explorer(IE)之外的所有现代浏览器
  • Microsoft Edge 12及更高版本

Array.from

Array.from语法如下

Array.from(_arrayLike_[, _mapFn_[, _thisArg_]])
from方法从array-likeiterable对象创建数组的新实例。

范例1:

看下面的代码

const numbers = [1, 2, 3, 4, 5];const newArray = Array.from(numbers, value => value * 2);
console.log(newArray); // [2, 4, 6, 8, 10]

上面的代码创建了一个新数组,其中数组的每个元素都乘以2。

范例2:

假设您要遍历页面中包含的所有脚本并打印src属性值,则可以使用该document.scripts属性返回文档中脚本元素的列表。

但是返回的对象是一个HTMLCollection看起来像数组的对象,但不是实际的数组。

所以,当我们尝试运用任何阵列方法类似forEachmap在其上,它给出了一个错误。为了转换诸如或(使用方法时返回)之类的iterable对象,我们可以使用method。HTMLCollectionNodeListdocument.querySelectorAllArray.from

Array.from(document.scripts).forEach(script => console.log(script.src)); 

浏览器支持:

  • 除Internet Explorer(IE)之外的所有现代浏览器
  • Microsoft Edge 12及更高版本

数组查找

Array.find语法如下

Array.find(callback(element[, index[, array]])[, thisArg])
find方法返回valuefirst element,其满足所提供的测试条件在数组中。

find方法将回调函数作为第一个参数,并对数组的每个元素执行回调函数。每个数组元素值都作为第一个参数传递给回调函数。

const employees = [{ name: "David Carlson", age: 30 },{ name: "John Cena", age: 34 },{ name: "Mike Sheridan", age: 25 },{ name: "John Carte", age: 50 }
];

并且我们想要获取名称为的员工记录John。在这种情况下,我们可以使用该array.find方法。

const employee = employees.find(employee => { return employee.name.indexOf("John") > -1;
});
console.log(employee); // { name: "John Cena", age: 34 }

即使"John Carte"在列表中,find方法在找到第一个匹配项时也会停止。因此它不会返回名称为"John Carte"

Codepen演示:https://codepen.io/myogeshchavan97/pen/wvvbPLm ? editors = 0011

浏览器支持:

  • 除Internet Explorer(IE)之外的所有现代浏览器
  • Microsoft Edge 12及更高版本

Array.findIndex

Array.findIndex语法如下

Array.findIndex(callback(element[, index[, array]])[, thisArg])

findIndex方法返回满足提供的测试条件的数组第一个元素的索引。否则,返回,表明没有元素通过测试。-1

const employees = [{ name: "David Carlson", age: 30 },{ name: "John Cena", age: 34 },{ name: "Mike Sheridan", age: 25 },{ name: "John Carte", age: 50 }
];
const index = employees.findIndex(employee => {return employee.name.indexOf("John") > -1;
});
console.log(index); // 1

在这里,我们得到的输出为1,这是名称为的第一个对象的索引John

Codepen演示:https://codepen.io/myogeshchavan97/pen/WNNBdxY ? editors = 0012

浏览器支持:

  • 除Internet Explorer(IE)之外的所有现代浏览器
  • Microsoft Edge 12及更高版本

数组过滤器

Array.filter语法如下

Array.filter(callback(element[, index[, array]])[, thisArg])</span>

filter方法返回a new array满足所提供测试条件的所有元素。

filter方法将回调函数作为第一个参数,并对数组的每个元素执行回调函数,并且将每个数组元素值作为第一个参数传递给回调函数。

filter方法返回一个数组,其中包含所有满足测试条件的元素

const employees = [{ name: "David Carlson", age: 30 },{ name: "John Cena", age: 34 },{ name: "Mike Sheridan", age: 25 },{ name: "John Carte", age: 50 }
];
const employee = employees.filter(employee => {return employee.name.indexOf("John") > -1;
});
console.log(employee); // [ { name: "John Cena", age: 34 }, { name: "John Carte", age: 50 }]

Codepen演示:https://codepen.io/myogeshchavan97/pen/ZEENvEd ? editors = 0011

请注意,filter方法始终返回一个数组。如果没有元素通过测试条件,则将返回一个空数组。

浏览器支持:

  • 所有现代浏览器和Internet Explorer(IE)9及更高版本
  • Microsoft Edge 12及更高版本

数组填充

Array.fill语法如下

Array.fill(value[, start[, end]])

fill方法使用静态值填充数组的所有元素,从开始索引(默认为零)到结束索引(默认数组长度)。

如果我们要创建一个预先填充有特定值的数组,则fill方法非常有用。

考虑一下,我们正在制作一个购物清单,并且页面上有5个商品的清单,我们希望将复选框的状态存储为选中状态。为此,我们可以初始化一个长度与复选框数相同的数组,并将其初始值设置为false。

因此,当我们选中任何复选框时,会将其设置为true

为了使其成为可能,我们可以使用array.fill以下方法

const checkboxes = new Array(5).fill(false);

这将创建一个由5个元素组成的数组,其值默认情况下设置为false

[false, false, false, false, false]

CodeSandbox(使用React):https ://codesandbox.io/s/gracious-frost-sz5d9

Codepen(使用Jquery):https ://codepen.io/myogeshchavan97/pen/Rwwmxgx?editors=1011

浏览器支持:

  • 除Internet Explorer(IE)之外的所有现代浏览器
  • Microsoft Edge 12及更高版本

Array.forEach

Array.forEach语法如下

Array.forEach(callback(currentValue [, index [, array]])[, thisArg]);

forEach方法对数组中的每个元素执行一次提供的功能

const months = ["January", "February", "March", "April"];
const returnedValue = months.forEach(month => {return month;
});
console.log('returnedValue: ', returnedValue); // undefined
请注意forEach,即使您从回调函数显式返回值,所以它仅用于遍历数组并执行一些处理或记录,它不会返回任何值,因此undefined如上例所示,返回的值将到来。

Codepen演示:https://codepen.io/myogeshchavan97/pen/rNNgdBK ? editors = 0012

浏览器支持:

  • 所有现代浏览器和Internet Explorer(IE)9及更高版本
  • Microsoft Edge 12及更高版本

Array.map

Array.map语法如下

Array.map(function callback(currentValue[, index[, array]]) {// Return element for new_array
}[, thisArg])

map方法对数组中的每个元素执行一次提供的函数,然后返回一个新的转换数组

const months = ["January", "February", "March", "April"];
const transformedArray = months.map(month => month.toUpperCase());
console.log(transformedArray); // ["JANUARY", "FEBRUARY", "MARCH", "APRIL"]

Codepen演示:https://codepen.io/myogeshchavan97/pen/gOOJewM ? editors = 0012

浏览器支持:

  • 所有现代浏览器和Internet Explorer(IE)9及更高版本
  • Microsoft Edge 12及更高版本

每个数组

Array.every语法如下

Array.every(callback(element[, index[, array]])[, thisArg])

every方法测试数组中的所有元素是否都通过提供的测试条件,并返回布尔值truefalse值。

考虑一下,您有一个注册表格,并且想要在提交表格之前检查是否输入了所有必填字段。您可以使用该every方法轻松检查每个字段值。

Codepen演示:https://codepen.io/myogeshchavan97/pen/QWWRjEa ? editors = 1011

浏览器支持:

  • 所有现代浏览器和Internet Explorer(IE)9及更高版本
  • Microsoft Edge 12及更高版本

数组

Array.some语法如下

Array.some(callback(element[, index[, array]])[, thisArg])

some方法测试at least one数组中的元素是否通过提供的函数给定的测试条件,并返回布尔值truefalse值。

找到第一个匹配项后返回true,如果没有匹配项则返回false。

使用此方法有一些有用的方案。

方案1:

考虑一下,我们有一个雇员列表,我们想检查某个雇员是否存在于该数组中,如果找到该雇员,还要获取该雇员的索引位置。

因此,我们可以使用method来做这两个事情,而不是分别使用findfindIndex方法some

Codepen演示:https://codepen.io/myogeshchavan97/pen/KKKLoZR ? editors = 0012

方案2:

数组forEachmap方法从头到尾运行,直到不处理数组的所有元素。一旦找到特定元素,就无法停止forEachormap方法或中断循环。

在这种情况下,我们可以使用数组some方法。的mapforEachsome方法利用在回调函数相同的参数。

  • 第一个参数是实际值
  • 第二个参数是索引
  • 第三个参数是原始数组

some一旦找到特定匹配项,该方法就会停止遍历数组,如方案1的上述代码笔示例所示。

浏览器支持:

  • 所有现代浏览器和Internet Explorer(IE)9及更高版本
  • Microsoft Edge 12及更高版本

数组减少

Array.reduce语法如下

Array.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

reduce方法在数组的每个元素上执行reducer函数(由您提供),从而产生单个输出值。

reduce方法的输出始终是单个值。它可以是一个对象,一个数字,一个字符串或一个数组等。它取决于您希望该reduce方法的输出生成什么,但是它始终是单个值。

假设您有一个具有x和y坐标的对象数组,并且想要获取x坐标的总和,则可以使用reduce方法,如下面的代码笔所示。

Codepen演示:https://codepen.io/myogeshchavan97/pen/Baaexjx ? editors = 0012

浏览器支持:

  • 所有现代浏览器和Internet Explorer(IE)9及更高版本
  • Microsoft Edge 12及更高版本

希望这些方法对您改进代码有帮助。

花房菇凉:关于前端学习路线的一些建议(内含经典自测题)​zhuanlan.zhihu.com
adc333ea2fb2de5224b90715fec9af6d.png
作者:Yogesh Chavan
译者:花房姑娘
链接:Insanely Useful JavaScript Array Methods to improve your coding skills
来源:hashnode

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/55292.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网快讯:荣耀打响重回海外第一枪;极米投影产品成双十一爆款;工业富联发起灯塔领航计划

国内要闻 《2021胡润百富榜》发布&#xff1a;农夫山泉创始人钟睒睒以3900亿元首次成为中国首富&#xff0c;抖音创始人张一鸣跃居第二&#xff1b;荣耀打响重回海外第一枪&#xff1a;多国市场发布荣耀50系列&#xff0c;已恢复与主流运营商及渠道商合作&#xff1b; 3、财富…

推荐两本 Spark 好书

点击蓝色“有关SQL”关注我哟 加个“星标”&#xff0c;天天与10000人一起快乐成长 这两本书&#xff0c;分别是&#xff1a; 《Spark 快速大数据分析》 &#xff08;英文书名《Learning Spark: Lightning-fast Data Analysis》&#xff09;《Spark高级数据分析》影印版&#x…

宋城演艺业绩同比下滑两倍:受花房科技拖累,计提超10亿元减值

因2020年度业绩大幅预亏以及拟股权投资减值准备等&#xff0c;深交所于2月2日对向宋城演艺&#xff08;SZ:300144&#xff09;下发关注函&#xff0c;要求该公司进行补充说明。 据了解&#xff0c;今年1月30日&#xff0c;宋城演艺披露的《2020年度业绩预告》、《关于拟计提长…

花椒六间房“花房之夜”落幕 全新升级不止心动

中新网1月18日电 17日&#xff0c;直播界备受关注的年度盛典“2019花房之夜”在北京凯迪拉克中心开启&#xff0c;百位明星嘉宾与来自花椒直播和六间房的近300位人气主播共同出席&#xff0c;见证了这一盛大的年度颁奖典礼。 在“花房之夜”现场&#xff0c;揭晓了“年度最受观…

EDG刷屏、花椒沉寂,“初老”花房如何闯关IPO?

LPL全球总决赛&#xff0c;EDG刷屏社交网络。 在B站、腾讯等直播平台&#xff0c;不仅各大游戏直播间人满为患&#xff0c;其它类直播间EDG相关话题也炙手可热&#xff1b;抖音、微博、朋友圈更纷纷刷出Z世代节日氛围。 与之鲜明对比的是&#xff0c;曾经的“直播界奥斯卡”花…

花椒母公司花房更新招股书:年利润4亿 周鸿祎是大股东

雷递网 雷建平 5月1日报道 花椒母公司花房集团日前向港股递交招股书&#xff0c;准备在香港上市。 一旦花房集团上市&#xff0c;将成为继斗鱼、虎牙、映客、天鸽互动之后又一家上市的直播企业&#xff0c;也是360集团孵化的又一家上市企业。 这之前&#xff0c;360集团孵化的3…

《领航优配》这只A股一字涨停!千亿巨头也火了,突然强势暴拉!

今日早盘&#xff0c;A股继续强势上攻&#xff0c;上证指数6连阳&#xff0c;科创50指数7连阳&#xff0c;中证500指数则一举突破此前的收拾平台&#xff0c;创出年内新高。 盘面上&#xff0c;光热发电、房地产、家居用品、仓储物流等板块涨幅居前&#xff0c;石油、鸡肉、光刻…

迈向应用现代化,企业开发离不开VMware Spring

“比你优秀的人&#xff0c;比你还努力”&#xff0c;这不是在说VMware Spring高效开发框架吗&#xff1f; 在蓬勃发展的Java市场&#xff0c;Spring是最受欢迎的程序语言。2021年&#xff0c;Snyk公布的JVM生态系统报告显示&#xff1a;在Java市场&#xff0c;一半以上在使用S…

马斯克陷OpenAI诈捐门!口口声声1亿美元,结果只有1500万可追溯

西风 发自 凹非寺量子位 | 公众号 QbitAI 号称给OpenAI捐了1亿美元的马斯克&#xff0c;实际上可能连一半都没给到&#xff1f;&#xff01; 众所周知&#xff0c;马斯克此前一直宣称给OpenAI捐了1亿美元&#xff0c;而且还在推特上大放厥词&#xff1a; “我仍然对于我捐赠了大…

OpenAI创始人拿微软100亿,是在下一步大棋

丰色 编译自 凹非寺量子位 | 公众号 QbitAI OpenAI获得微软100亿美元投资的消息出来后&#xff0c;一些人的想法有些沮丧&#xff1a; 一方面&#xff0c;摆脱了经济压力的OpenAI可能将不再那么“open”、顺而放弃“开发造福每个人的AI技术”的精神&#xff1b; 另一方面&#…

全面了解大语言模型,这有一份阅读清单

机器之心报道 机器之心编辑部 进NLP群—>加入NLP交流群 了解当代大型语言模型背后的设计、约束和演变&#xff0c;你可以遵循本文的阅读清单。 大型语言模型已经引起了公众的注意&#xff0c;短短五年内&#xff0c;Transforme等模型几乎完全改变了自然语言处理领域。此外&a…

ChatGPT能给IOT行业带来哪些改变

引言# 随着移动互联网、传感器的发展&#xff0c;移动互联的潮流逐渐转移到物联网行业&#xff0c;每个设备成为了物联网连接的终端。 与传统的设备相比&#xff0c;智能设备最突出的特点就是智能化。目前&#xff0c;在市场上的智能设备通过智能程序设定或者语音来执行人类下…

女朋友的道歉方式

1 女朋友的道歉方式 2 看吧,无聊的时候什么事都干得出来3 这猫太坏了&#xff01;4 还以为是特效,原来是实物 5 叉子的妙用 6 也太信任这块玻璃了吧…… 7 棉花糖炸酱面......大家感受一下 你点的每个赞&#xff0c;我都认真当成了喜欢

史上最难的初等几何问题?分享一个参考答案

题目发出后&#xff0c;大家的回应似乎比我想象中的更积极&#xff0c;我看到了好几个不同的正确解答。加上我本来知道的几种做法&#xff0c;现在我已经知道了至少5种正确的解法。现在随便发一个&#xff0c;供大家参考。 我们首先从号称世界第二难的几何题“50-60三角形”…

一道有趣的几何证明题

上初中的时候在课外书上看到过一个数学题目&#xff0c;那时觉得特别有趣&#xff0c;后来了在大学里也常常会想起这个数学题。今天在这里跟大家分享下&#xff01; 题目是&#xff1a;证明任意一个个三角形都是等腰三角形。 初看这个题目&#xff0c;大家都可能会有疑问&…

【证明题】(一)微分中值定理

目录 微分中值定理单中值一阶导数中值定理问题二阶导数中值定理问题 双中值 ϵ &#xff0c; η \epsilon&#xff0c;\eta ϵ&#xff0c;η 可能相等 ϵ &#xff0c; η \epsilon&#xff0c;\eta ϵ&#xff0c;η 不可相等 中值不等式拉格朗日证明题泰勒公式证明题 参考资…

MathGraph: 一个用来自动求解高中数学习题的数学知识图谱

论文地址&#xff1a; MathGraph&#xff1a;A Knowledge Graph for Automatically Solving Mathematical Exercises 贡献&#xff1a; 设计了一个数学知识图MathGraph&#xff0c;包括实体和关系 设计几个算法&#xff0c;将数学习题与MathGraph对齐&#xff0c;用对齐后的子…

有趣数学1的证明

之前说了利用以10为底数巧算首位数字&#xff0c;答案是得到了&#xff0c;但是需要证明这种方法确实是正确的&#xff0c;其实证明非常简单。 证明&#xff1a;令x^y t 两边同时取以x为底&#xff0c;y 得到 y * . 由于数字都是以10进制展示的&#xff0c;我们设t的…

高数证明题技巧总结

中值定理 1.要证明一个不等式&#xff0c;有常数a和b&#xff0c;且出现了g(b)-g(a)和b-a&#xff0c;则一般使用拉格朗日中值定理&#xff0c;将g(b)-g(a)化为g(ξ)(b-a)&#xff0c;证明g(ξ)大于或小于原式中(b-a)的系数 例如&#xff0c;证明&#xff1a;当e<a<b&l…