ES6常用数组方法及模拟实现
这里给大家分享下我搜索到的几个ES6常用数组方法及模拟实现,废话不多说,上代码

Array.from
可以将一个类数组转换成数组
在出现Array.from这个方法之前,我们转换类数组的方法:
Array.prototype.slice.call(arguments)
使用Array.form
Array.from(arguments, item => {
return item;
})
Array.prototype.findIndex
查找数组中对应的索引
let arr = [1,2,3,4,5];
const index = arr.findIndex(item => item === 1); // output:0
模拟实现findIndex
Array.prototype.findIndex = function(callback){
for(let i = 0; i<this.length; i++){
if( callback(this[i]) ){
return i;
}
}
return -1;
}
Array.prototype.find
查找数组中的某个元素 let arr = [1,2,3,4];
arr.find(item => item > 2); // output: 3
模拟实现find
Array.prototype.find = function(callback) {
for(let i = 0; i < this.length; i++){
let flag = callback(this[i]);
if(flag){
return this[i]
}
}
return undefined;
}
Array.prototype.map
map方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果 const arr = [1,2,3];
arr.map(item => item * 2) // output: [2,4,6]
模拟实现map
Array.prototype.map = function(callback) {
let newArr = [];
for(let i = 0; i < this.length; i++){
let result = callback(this[i]);
newArr.push(result);
}
return newArr;
}
注意这里提个小只是,通过map的模拟实现应该可以大致明白为什么map和foreach不能跳出循环
Array.prototype.reduce
方法对累计器和数组中的每个元素(从左到右)应用一个函数,将其简化为单个值 const arr = [2,3,4];
// output: 9
const sum = arr.reduce((sum, item) => {
sum += item;
return sum;
},0);
模拟实现reduce
Array.prototype.reduce = function(callback, initialValue){
let sum = initialValue || this[0];
if(!sum){
return;
}
for(let i = 0; i < this.length; i++){
sum = callback(sum, this[i], i , this);
}
return sum;
}
Array.prototype.some
数组中的元素,有一个满足条件,则返回true var arr = [1, 2, 3]; arr.some(item => item > 2); // output: true
模拟实现some
Array.prototype.some = function(callback) {
for(let i = 0; i < this.length; i++) {
if(callback(this[i])){
return true;
}
}
return false;
}
Array.prototype.every
数组中的所有元素都满足条件,则返回true var arr = [1, 2, 3]; arr.every(item => item > 2); // output: false
模拟实现every
Array.prototype.every = function(callback){
for(let i = 0; i < this.length; i++){
if(!callback(this[i])){
return false;
}
}
return true;
}
Array.prototype.filter
filter方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素 let arr = [1,2,3];
arr.filter(item => item > 2); // output: [3]
模拟实现filter
Array.prototype.filter = function(callback) {
let newArr = [];
for(let i = 0; i < this.length; i++){
let flag = callback(this[i]);
if(flag){
newArr.push(this[i])
}
}
return newArr;
}
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

ES6常用数组方法及模拟实现的更多相关文章
- ES6新增的常用数组方法(forEach,map,filter,every,some)
ES6新增的常用数组方法 let arr = [1, 2, 3, 2, 1]; 一 forEach => 遍历数组 arr.forEach((v, i) => { console.log( ...
- 迟早要知道的JS系列之常用数组方法
常用数组方法 一.不会改变原始数组的方法: 即访问方法,下面的这些方法绝对不会改变调用它们的对象的值,只会返回一个新的数组或者返回一个其它的期望值. 1. concat() ** 语法:** Java ...
- js与jquery常用数组方法总结
昨天被问数组方法的时候,问到sort()方法是否会改变原来的数组.本来我猜是不会,也是这么说,马上我又觉得,知识这种东西,不确定的时候直接说不确定或不知道就好,只是凭借着不确定的猜测或者是记忆,害人害 ...
- js中常用数组方法concat join push pop slice splice shift
javascript给我们很多常用的 数组方法,极大方便了我们做程序.下面我们来介绍下常用的集中数组方法. 比如 concat() join() push() pop() unshift() shif ...
- ES6的数组方法之Array.from
首先说说什么是数组:数组在类型划分上归为Object,属于比较特殊的对象,数组的索引值类似于对象的key值. 数组的几个注意点: 1.数组的长度是可读属性,不可更改,数组的长度根据索引最大值. 2.数 ...
- JavaScript常用数组方法
JavaScript数组方法有以下这些: forEach() 方法对数组的每一个元素执行一次提供的函数. map() 方法创建一个新数组,其结果是该数组都执行一次函数,原函数保持不变. filter( ...
- 使用ES6新数组方法(象C# Lambda表达式一样写查询语句)
let people = [ {id: 1, name: "a", age: 12}, {id: 2, name: "b", age: 13}, {id: 3, ...
- es6 Array数组方法
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- es6常用数组操作及技巧汇总
定义数组 const array = [1, 2, 3]; // 或者 const array = new Array(); array[0] = '1'; 检测数组 Array.isArray([] ...
- javascript中常用数组方法详细讲解
javascript中数组常用方法总结 1.join()方法: Array.join()方法将数组中所以元素都转化为字符串链接在一起,返回最后生成的字符串.也可以指定可选的字符串在生成的字符串中来分隔 ...
随机推荐
- NC201613 Jelly
题目链接 题目 题目描述 Nancy喜欢吃果冻! Nancy钻进了一个 \(n \times n \times n\) 的果冻里,她想从(1,1,1)一路上.下.左.右.前.后六个方向吃到(n,n,n ...
- Java注解--一张图一案例掌握自定义注解
1.概述 是什么:是对方法.类.参数.包.域以及变量等进行代码功能的增强或者修改程序的行为等操作. 应用 跟踪代码依赖性,实现替代配置文件功能 在反射中使用Annotation,字段格式化(如:数据字 ...
- CoreDNS笔记
因为项目的原因需要在客户端启动DNS服务,拦截本机DNS请求,考察了一下开源的DNS Server项目,适合在Windows下使用的只有CoreDNS. 说明 CoreDNS的项目地址 https:/ ...
- 【Unity3D】阴影原理及应用
1 阴影原理 光源照射到不透明物体上,会向该物体的后面投射阴影,如果阴影区域存在其他物体,这些物体不被光源照射的部分就需要渲染阴影.因此,我们可以将阴影的生成抽象出 2 个流程:物体投射阴影.物体 ...
- 【OpenGL ES】MVP矩阵变换
1 前言 本文主要介绍 MVP 矩阵变换,其本质是线性变换,应用见→绘制立方体. Model:模型变换,施加在模型上的空间变换,包含平移变换(translateM).旋转变换(rotateM).对 ...
- Springboot集成Druid连接池并实现数据库密码加密
Druid介绍 Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBoss ...
- OCP试题解析之052-- DROP PROFILE app_user
133.You created a profile APP_USER and assigned it to the users. After a month, you decide to drop t ...
- [BUUCTF][Web][ACTF2020 新生赛]Exec 1
打开靶机对应url 显示可以输出ip 来进行ping操作 尝试试一下是否有命令注入的可能 127.0.0.1|ls 果然可以,输出结果 index.php PING 127.0.0.1 (127.0. ...
- vscode添加gitbash终端方法
1.打开vscode 2.点击文件,ctrl+, 3.搜索shell windows { ... // 添加如下代码 "terminal.integrated.profiles.window ...
- 以解析csv数据为例,讨论string、char[]、stream 不同类型来源是否能进行高性能读取解析封装可能性
篇幅较长,所以首先列举结果,也就是我们的目的 核心目的为探索特定场景对不同类型数据进行统一抽象,并达到足够高性能,也就是一份代码实现,对不同类型数据依然高性能 以下为结果,也就是我们的目的: 对1w行 ...