热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

处理Array方法及其实现新方式

2019年都快过完了,你还在用老掉渣的for循环和forEach么?教你几招,让你秒变代码最清爽的仔!!&#

2019年都快过完了,你还在用老掉渣的for循环和forEach么?

教你几招,让你秒变代码最清爽的仔!!!

基础篇
数组方法map、filter、some、reduce与forEach的pk

Round 1: map vs forEach

// double number
const number = [1,2,3,4,5];// forEach Version
const doubleNumber = [];
number.forEach(item => doubleNumber.push(item * 2))// map Version
const douberNumber = number.map(item => item * 2);

map函数一行搞定,简直完胜;

Round2: filter vs forEach

// filter number that less than 10
const number = [1,12,3,24,5];// forEach Version
const filterNumber = [];
number.forEach(item &#61;> {if (item <10) {filterNumber.push(item); }
})// filter Version
const filterNumber &#61; number.filter(item &#61;> item <10);

filter函数一行搞定&#xff0c;forEach要6行。 filter简直是减轻工作量利器&#xff01;

Round3: some vs forEach 类似的还有every方法

// is there anyone element greater than 10
const number &#61; [1,12,3,24,5];// forEach Version
const flag &#61; false;
number.forEach(item &#61;> {if (flag > 10) {flag &#61; true;}
})// some Version
const flag &#61; number.some(item &#61;> item > 10)

some同样一行搞定

Round4: reduce vs forEach

const number &#61; [1,2,3,4,5];// forEach Version
const total &#61; 0;
number.forEach(item &#61;> total &#43;&#61; item)// reduce Version
const total &#61; number.reduce((total, value) &#61;> total &#43; value)

reduce同样简洁明了

优势&#xff08;使用map、filter、reduce、every、some等函数优势&#xff09;

减少代码量
语义化表达其他人很容易明白代码用意
函数化编程&#xff0c;少引入额外的作用
易于维护、测试和扩展
劣势

相比于for循环&#xff0c;map这些方法可能在极其严苛的情况下会相对来说慢点。
但是和forEach相比性能是一样的。

提高篇
详细介绍具体数组方法及其实现

map介绍

map方法&#xff1a; 接收两个参数&#xff0c;一个是函数&#xff0c;另一个是函数的this值。 arr.map(callback(currentValue[[, index[, array]]), [,thisArg])

[]中内容代表可选参数 下同

map用法

const number &#61; [0.1, 1.5, 2.9];
const ceil &#61; number.map(item &#61;> Math.ceil(item));
// number值不会改变&#xff0c; ceil值是[0,1,2]const number &#61; [{a: 1}, {a: 2}, {a: 3}];
const sumNumber &#61; number.map(function(item) {return item.a &#43; this;
}, 100)
// number值不会改变&#xff0c; sumNumber值为[101, 102, 103]
// notice: 当map有第二个参数时&#xff0c;第一个参数callback就不能写成箭头函数的形式了。是由于箭头函数的this是在定义的时候已经确定&#xff0c;而不是调用的时候确定。&#39;paprika is a good gril&#39;.split(&#39;&#39;).map(item &#61;> item.charCodeAt(0));
Array.prototype.map.call(&#39;paprika is a good gril&#39;, item &#61;> item.charCodeAt(0))
// 两种方式给字符串应用map方法[&#39;1&#39;, &#39;2&#39;, &#39;3&#39;].map(parseInt) // [1, NaN, NaN]
[&#39;1&#39;, &#39;2&#39;, &#39;3&#39;].map(item &#61;> parseInt(item)) // [1, 2, 3]

map实现

if (!Array.prototype.map) {Array.prototype.map &#61; function(callback, thisArg) {var T, A, k;if (this &#61;&#61; null) {throw new TypeError(&#39;this is null not defined&#39;);}// 让this一定会有length方法&#xff1b;// 如果通过Array.prototype.map.call(111),这个时候this是Number类型111&#xff0c;没有length方法。主要是处理这种类似的特殊情况。var O &#61; Object(this);// >>> 0 的作用是让len的值始终为正整数var len &#61; O.length >>> 0;if (typeof callback !&#61;&#61; &#39;function&#39;) {throw new TypeError(callback &#43; &#39;is not a functon&#39;);}if (arguments.length > 1) {T &#61; arguments[1];}A &#61; new Array(len);k &#61; 0;while (k }

filter介绍

arr.filter((callback[[, index], array])[, thisArg]) filter参数格式和map一致&#xff0c;一个函数&#xff0c;一个可选的this参数

filter用法


剩下内容&#xff0c;我们后续见(#.#)

引用&#xff1a;
developer.mozilla.org/en-US/docs/…

有问题的话&#xff0c;请多多交流ღ( ´&#xff65;ᴗ&#xff65;&#96; )。

作者&#xff1a;forgetandforward
链接&#xff1a;https://juejin.im/post/5d79af9ef265da03f233fa04
来源&#xff1a;掘金
著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。


推荐阅读
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
author-avatar
mobiledu2502860093
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有