es6数组循环

article/2025/9/22 21:08:14

先说说es5的循环,一下几种循环的前五种接收的参数是一样的,都是两个参数:
第一个参数:循环里面执行的回调函数,循环调用执行的语句
第二个参数:this的指向
循环中回调函数的参数有三个:
第一个参数:循环出来的值
第二个参数:循环出来的索引值
第三个参数:数组本身
1.forEach()

let arr = ['东','京','很','热'];
arr.forEach(function(val,index,arr){console.log(this,val,index,arr);//{111} "东" 0 ['东','京','很','热']//{111} "京" 1 ['东','京','很','热']//{111} "很" 2 ['东','京','很','热']//{111} "热" 3 ['东','京','很','热']
},111)

这个例子中输出的111就是改变this之后的值,如果没有做任何修改的话当然是window,用箭头函数是下面这样的:

let arr = ['东','京','很','热'];
arr.forEach((val,index,arr)=>{console.log(this,val,index,arr);//window "东" 0 ['东','京','很','热']//window  "京" 1 ['东','京','很','热']//window  "很" 2 ['东','京','很','热']//window  "热" 3 ['东','京','很','热']
},111);

this并没有发生改变,因为在这个箭头函数的例子里this本身指向的就是window
2. map()
这个方法一般在和后台数据交互的时候,做映射,所谓映射就是–对应关系,与forEach不一样的地方就是有返回值,如果不加return就和forEach完全一样,因为forEach没有返回值;如果加了return,就会返回一个新数组,请看下面两个列子:
(1)没给return返回值的时候,返回的是undefined

let arr = ['东','京','很','热'];
let newArr = arr.map((val,index,arr) => {console.log(val,index,arr);// "东" 0 ['东','京','很','热']// "京" 1 ['东','京','很','热']// "很" 2 ['东','京','很','热']// "热" 3 ['东','京','很','热']// [undefined, undefined, undefined, undefined]
});
console.log(newArr);

(2)有return返回值的时候

let arr = ['东','京','很','热'];
let newArr = arr.map((val,index,arr) => {console.log(val,index,arr);return 1;// "东" 0 ['东','京','很','热']// "京" 1 ['东','京','很','热']// "很" 2 ['东','京','很','热']// "热" 3 ['东','京','很','热']// [1, 1, 1, 1]
});
console.log(newArr);

map方法一般会用在整理数据结构上,在数据交互的时候,根据需求我们需要改一些前端部分需要的数据形式:

let aNews = [{a: '麻生香织', b: 404512},{a: '波多野结衣', b: 444512},
];
let newArr = aNews.map((val,index,arr) => {let json = {};json.name = `名字:${val.a}`;json.count = `排行榜:${val.b}`;return json;
});
console.log(newArr);

3.filter()
用来过滤一些不合格的元素,如果回调函数返回的是true,那么自然会被留下来,为false的就会被过滤掉

let aNews = [{title: '索尼大法', read: 15655, hot: false},{title: '们怕是门店费', read: 58644, hot: true},
];
let newArr = aNews.filter((val,index,arr) => {return val.hot==true;
});
console.log(newArr);

控制台输出:
控制台输出的内容
4.some()
这个方法类似于查找一个字符串存在不存在:

let aNews = ['冰','岩','阿兰若'];
let newArr = aNews.some((item,index,arr) => {return item=='冰';
});
console.log(newArr);  // true

5.every()
和some一样,只不过是查找数组中的每一项,所有元素都要符合条件,才返回true:

let arr = [2,4,6,8,10];
let newArr = arr.every((val,index,arr)=>{return val%2==0;  // 判断是不是偶数
});
console.log(newArr);  // true

下面这两种方法可以用来求数组的和、阶乘、幂运算;接受4个函数参数。举例如下:
6.reduce()
从左往右运算:

let arr = [2,3,3];
let newArr = arr.reduce((prev,curr,index,arr)=>{return prev-curr;   // 运算的方式
});
console.log(newArr);  // -4

7.reduceRight()
从右往左运算

let arr = [2,3,3];
let newArr = arr.reduceRight((prev,curr,index,arr)=>{return prev-curr;   // 运算的方式
});
console.log(newArr);  // -2

ES2017新增的幂运算符()**

let arr = [2,3,2];
let newArr = arr.reduce((prev,curr,index,arr)=>{return Math.pow(prev,curr);//return prev**curr;
});
console.log(newArr);    // 64

8.for…of…

let arr = ['aaa','bbb','ccc'];
for (let val of arr) {console.log(val);   // 输出每一项// aaa// bbb// ccc
}for (let index of arr.keys()) {console.log(index); // 输出每一项的索引// 0// 1// 2
}for (let item of arr.entries()) {console.log(item);  // 输出三个数组// [0, "aaa"]// [1, "bbb"]// [2, "ccc"]console.log(item[0]);   // 0 1 2console.log(item[1]);   // aaa bbb ccc
}for (let [key,val] of arr.entries()) {console.log(key,val);   // 0 "aaa"// 1 "bbb"// 2 "ccc"
}

本文也是结合网上示例,总结格式,方便自己以后查看,如有错误请多多指正!
原文链接


http://chatgpt.dhexx.cn/article/a14PHojZ.shtml

相关文章

数组实现循环队列

循环队列 在实际使用队列时,为了使队列空间能重复使用,往往对队列的使用方法稍加改进:无论插入或删除,一旦rear指针增1或front指针增1 时超出了所分配的队列空间,就让它指向这片连续空间的起始位置。可以解决假溢出问题…

竞赛:图解循环数组--借助循环数组进行队列的模拟实现以及循环数组的理解讲解

文章目录 队列的模拟实现队列是什么实现过程实现原理具体代码实现 循环数组循环数组是什么?循环数组如何实现队列?实现原理 总结 队列的模拟实现 队列是什么 队列是一种数据结构,遵循的是先进先出,后进后出的原则,基…

循环数组、对象的方法(超实用)

(前言:每一个方法我都会举例说明,为了避免混淆,所有方法例子中都使用同一个数组arr和对象obj;另外,由于 forEach太low,every太不常用,所以直接略过) 1. for in &#x…

循环数组 及 实现

数组 是一种 线性结构, 在内存中是一段 连续的内存 存储空间存储。 那么 如何实现循环的数组呢? 什么是循环数组? 循环数组 就是 数组的头尾是相连的。 假如有一个数组 [3,7,2,9,1,5] , 形成的环形数组 如下图: 用代码实现&am…

js数组转换为数组对象

let arr ["刘备","关羽","张飞","赵云","马超","黄忠"]; let obj {}; // 将数组转化为对象 for (let key in arr) {obj[key] arr[key];}; let newObj Object.keys(obj).map(val > ({label: obj[val],value…

js 数组转对象方法

记录将数组转成对象方法 let array [1,2,3,4,5]; let obj {}; obj Object.assign({}, array) console.log(obj); // {1,2,3,4,5}

js数组添加对象

一般业务都会有在数组里添加对象属性的需求 以下列出几种常见的添加对象的方法供大家参考 一、最常见的方法:push(尾部添加) 业务场景 arr [{num:1},{num:2},{num:3}];newArr arr.push({num:4})console.log(arr) 结果: 二、…

js 多维数组/对象转一维数组对象

多维对象转数组: let objTree {name: 河南,children: {name: 洛阳,children: {name: 洛宁,children: {name: 兴华,},},},}function toList(obj, listre) {for (let key in obj) {if (typeof obj[key] object) {console.log(是对象, obj[key])toList(obj[key], li…

jQuery数组对象转javascript数组

当我们在前端开发中,使用了jQuery时,我们通常通过$(".box-item")的方式获取的是一个jQuery对象是一个类数组对象,当我们需要向后台传输的数据中,使用的是javascript数组,或者有时候,我们需要将jQ…

js 三维数组转对象数组 二维数组转对象数组

1. 三维数组转对象数组 输出: 代码如下: let dataArr [[[109.654541015625, 29.34387539941801],[110.467529296875, 59.34387539941801],[109.654541015625, 30.050076521698735],],]let list []dataArr[0].forEach(item > {let obj {lon: item[0…

如何在 JavaScript 中将数组转为对象

首先,我们需要明白对象具有键和值。 const object {key: value } 如果我们想把某个东西转换成一个对象,我们需要传递具有这两个要求的东西:键和值。 满足这些要求的参数有两种类型: 具有嵌套键值对的数组 Map 对象 数组 这是一个…

第二类斯特林数

概要&#xff1a; 第二类斯特林数表示将n个不同的元素分成m个集合的方案数。 代码 s[i][j]实现代码&#xff1a; const int mod1e97;//取模 LL s[N][N];//存放要求的第一类Stirling数 void init(){memset(s,0,sizeof(s));s[1][1]1;for(int i2;i<N-1;i){for(int j1;j<…

斯特林数

斯特林数分为第一类斯特林数和第二类斯特林数&#xff0c;第一类斯特林数分为有符号斯特林数和无符号斯特林数&#xff1b; 1.什么是圆排列&#xff1f; 圆排列是把n个数中拿出k个数组成一个圆的种类数&#xff0c;则这里组成m个圆排列的意思是组成m个不同的圆的种类数&…

斯特林数(Stirling)

第一类斯特林数 第一类斯特林数表示的是将n个不同元素分成k个不同的环的方案数。两个环不相同当且仅当这两个环不能通过旋转得到。记作s(n,k). s(n,k)的递推公式&#xff1a; s(n,k)(n-1)*s(n-1,k)s(n-1,k-1) ,1<k<n 边界条件&#xff1a;s(n,0)0 ,n>1 s(n,n)1 ,n…

斯特林数(Siteling_Number)

一、基本概念 斯特林数出现在许多组合枚举问题中. 第一类斯特林数 StirlingS1[n,m]&#xff0c; 给出恰包含 m 个圈的 n 个元素 的排列数目. 斯特林数满足母函数关系 . 注意某些 的定义与 Mathematica 中的不同&#xff0c;差别在于因子 . 第二类斯特林数 StirlingS2[n,m]给…

斯特林数(数论)

斯特林数&#xff1a;stirling 概念&#xff1a; 1、第一类斯特林数&#xff1a;把1~n排列成k个非空循环的方案数&#xff0c;用小写s(n,k)或[n k]表示 2、第二类斯特林数&#xff1a;将1~n排成k个非空集合的方案数&#xff0c;用大写S(n,k)或{n,k}表示 第一类斯特林数&…

组合数学 —— 斯特林数(Stirling)

【第一类斯特林数】 1.定理 第一类斯特林数 S1(n,m) 表示的是将 n 个不同元素构成 m 个圆排列的数目。 2.递推式 设人被标上1,2,.....p&#xff0c;则将这 p 个人排成 m 个圆有两种情况&#xff1a; 在一个圆圈里只有标号为 p 的人自己&#xff0c;排法有 S1(n-1,m-1) 个。…

Linux Debian11创建新用户和删除用户

一、 Debian 创建 新用户 1.创建新用户 首先&#xff0c;要创建用户&#xff0c;当前用户必须是 root 用户或者 sudo 用户。 使用下面adduser 命令创建一个用户名为test的sudo用户&#xff0c;按照提示输入密码&#xff0c;使用 adduser 命令&#xff0c;还会创建用户的主目…

Linux中创建新用户,设置ID与密码

如&#xff1a;新建用户admin&#xff0c;指定在/root家目录下&#xff0c;并指定用户id为6666&#xff0c;设置密码&#xff1a;admin123 添加用户 add&#xff1a;用于创建新的系统用户 语法&#xff1a;useradd[选项] 用户名 -d 指定用户的家目录&#xff08;默认用户名目录…

Linux手工创建新用户

准备工作&#xff08;配置流程的理解&#xff09; Linux中useradd命令即一系列文件操作的结合体&#xff0c;所以我们可以通过查看useradd命令来确认我们手工创建新用户需要完成的文件配置 找到man useradd中涉及的文件部分 对于手工创建用户有用的文件&#xff1a; /etc/pas…