数组遍历forEach、map、filter、find、some、every、reduce等区别


来源!!!

一、arr.forEach()

遍历数组全部元素,利用回调函数对数组进行操作,自动遍历数组.length次,且无法break中途跳出循环,不可控

不支持return操作输出,return只用于控制循环是否跳出当前循环

示例:

[1,2,3,4].forEach((n)=>{
    console.log(n);
})

在这里插入图片描述

二、arr.map()----更新数组

1.创建新数组
2.不改变原数组
3.输出的是 return什么就输出什么 新数组
4.回调函数参数,item(数组元素)、index(序列)、arr(数组本身)
5.使用return操作输出,会循环数组每一项,并在回调函数中操作
示例:

 var arr = [1,2,3,4,5] ;
 var newArr = arr.map(function(item,index){
 		return item*2 ;        //操作更新数组
 })
 console.log(newArr);                  //打印新数组
 console.log(arr);                     //打印原数组,map()没有改变原数组

在这里插入图片描述

三、arr.filter()、includes()、find()、findIndex()— —筛选数组

1、arr.filter()

1.创建新数组
2.不改变原数组
3.输出的是 判断为true的数组元素 组成的新数组
4.回调函数参数,item(数组元素)、index(序列)、arr(数组本身)
5.使用return操作输出,会循环数组每一项,并在回调函数中操作
示例:

var arr = [1,2,3,4,5] ;
var newArr = arr.filter(function(item,index){
		return item>2&&item<5 ;         //根据判断为true来遍历循环添加进新数组
})
console.log(newArr);                            //打印新数组
console.log(arr);                               //打印原数组,map()没有改变原数组

在这里插入图片描述

2、arr.includes()

只是判断数组是否含有某值,不用return,不用回调函数,输出一个true或false

示例

var arr = [1,2,3,4,5] ;
var new1 = arr.includes(5);    //不用回调函数,且是完全匹配才行如原数组是55则flase(实用性不如正则)
console.log(new1);
console.log(arr);

在这里插入图片描述

3、arr.find()

1.不创建新数组
2.不改变原数组
3.输出的是一旦 判断为true 则跳出循环输出符合条件的数组元素
4.回调函数参数,item(数组元素)、index(序列)、arr(数组本身)
5.使用return操作输出,会循环数组每一项,并在回调函数中操作
示例:

var arr = [1,2,3,4,5] ;
var new1 = arr.find(function(item,index){
		return item>2&&item<5 ;    //当遍历循环到判断到一个为true则跳出循环,输出当前数组元素,不再循环
})
var new2 = arr.find(function(item,index){
		return item.toString().indexOf(5)>-1 ;	//把当前数组元素转为字符串,则可index()>-1判断是否含有某字符
})
console.log(new1);       //打印操作后的结果
console.log(new2)        //打印是否含有某字符(用正则会更好,这里学习使用一下)
console.log(arr);        //打印原数组,find()没有改变原数组

在这里插入图片描述

4、arr.findIndex()— — 与find()相同

1.不创建新数组
2.不改变原数组
3.输出的是一旦 判断为true 则跳出循环输出符合条件的数组元素
4.回调函数参数,item(数组元素)、index(序列)、arr(数组本身)
5.使用return操作输出,会循环数组每一项,并在回调函数中操作

var arr = [1,2,3,4,5] ;
var new1 = arr.findIndex(function(item,index){
		return item>2&&item<5 ;    //当遍历循环到判断到一个为true则跳出循环,输出当前数组元素序列,不再循环
})
var new2 = arr.findIndex(function(item,index){
		return item.toString().indexOf(5)>-1 ;	//把当前数组元素转为字符串,则可index()>-1判断是否含有某字符
})
console.log(new1);       //打印操作后的结果
console.log(new2)        //打印是否含有某字符(用正则会更好,这里学习使用一下)
console.log(arr);        //打印原数组,findIndex()没有改变原数组

在这里插入图片描述

四、arr.some()、every()— —判断数组

1、some()

1.不创建新数组
2、不改变原数组
3、输出的是判断为true则马上跳出循环并return成true
4、回调函数参数,item(数组元素)、index(序列)、arr(数组本身)
5、使用return操作输出,会循环数组每一项,并在回调函数中操作

 
var arr = [1,2,3,4,5] ;
var new1 = arr.some(function(item,index){
		return item>2&&item<5 ;	//判断出一个符合条件则跳出循环并输出true
})
var new2 = arr.some(function(item,index){
		return item>5 ;	        //判断出数组全部元素都不符合条件则输出flase
})
console.log(new1);
console.log(new2);
console.log(arr);

在这里插入图片描述

2、every()— —与some相反

五、reduce()— —叠加数组

不一定在数学意义上的叠加计算,这里叠加指:可以利用前遍历操作的结果到下一次遍历使用,重复叠加使用下去

1、创建新数组
2、不改变原数组
3、输出的是return叠加什么就输出什么 新数组
4、回调函数参数
pre(第一次为数组第一项,之后为上一操作的结果)
next(数组的下一项)
index(next项的序列)
arr(数组本身)
回调函数后的改变第一项参数。(不影响原数组)
5、使用return操作输出,会循环数组每一项,并在回调函数中操作

//求和计算
var arr1 = [1,2,3,4,5] ;
var new1 = arr1.reduce(function(sum,next,index){
		return sum+next ;	
		/*
		 *第一次:pre-->1  next-->2  index-->1
		 *遍历计算return得结果为pre+next=1+2=3
		 *第二次:pre-->3  next-->3  index-->2
		 *遍历计算return得结果为pre+next=3+3=6
		 *第三次:pre-->6  next-->4  index-->3
		 *遍历计算return得结果为pre+next=6+4=10
		 *第四次:pre-->10  next-->5  index-->4
		 *遍历计算return得结果为pre+next=10+5=15
		*/
})
 
//扁平化数组
var arr2 = [[1,2,3],[4,5],[6,7]] ;
var new2 = arr2.reduce(function(pre,next,index){
		return pre.concat(next);	//前数组拼接后数组 .concat()
})
 
//对象数组叠加计算
var arr3 = [{price:10,count:1},{price:15,count:2},{price:10,count:3}];
var new3 = arr3.reduce(function(pre,next,index){
		return pre+next.price*next.count;
		//当需要对第一项进行操作时,后面pre使用上一项操作结果,不再需要操作
		//所以当需要操作第一项的时候,利用reduce(callbreak(){},往数组第一项前添加一项,如:0)
},0)	//在原数组第一项添加为0,不改变原数组,则可不操作第一项
 
console.log(new1);
console.log(new2);
console.log(new3);
 
console.log(arr1);		//普通数组
console.log(arr2);		//多重数组
console.log(arr3);		//对象数组

在这里插入图片描述

<think>好的,我需要回答用户关于ES6数组遍历方法的问题,并给出示例。首先,我需要回忆ES6中常用的数组遍历方法,确保涵盖主要的方法如forEachmapfilterreducesomeeveryfindfindIndex等。同时,要注意用户提供的引用内容,可能需要结合这些引用中的信息来完善回答。 根据引用[1]、[3]、[4],forEachmap区别是重点,forEach不返回新数组,而map会返回处理后的新数组。此外,其他方法如filterreducesomeevery等也需要解释清楚,每个方法的作用和示例代码。 接下来需要组织回答结构,确保每个方法都有示例代码和说明,并且符合用户要求的格式:行内数学表达式用$...$,独立公式用$$...$$。不过在这个问题中可能数学公式较少,但如果有的话需要注意格式。比如如果提到数组长度,可能需要用$n$表示。 然后检查每个引用是否被正确引用,比如引用[3]提到map不改变原数组,而返回新数组,这在示例中需要体现。引用[4]对各个方法进行了小结,可以适当引用到每个方法的解释中。 还要生成相关问题,可能需要考虑用户可能进一步询问的问题,如性能比较、实际应用场景、如何选择方法等。 最后确保回答使用中文,代码块格式正确,引用标识自然添加在段落末尾。例如,当提到map方法时,引用[3]和[4]的相关内容需要标注。 现在需要逐个整理每个方法,给出示例代码,并附上对应的引用。确保每个方法的说明准确,示例简洁明了。同时,代码示例中的语法要正确,比如使用箭头函数、正确的参数传递等。 可能需要注意用户提供的引用中有提到ES6的遍历方法,如findIndex、includes等,也需要包含在回答中。另外,引用[5]似乎关于CSS定位,可能与当前问题无关,可以忽略。 最后,生成的相关问题需要与ES6数组遍历方法相关,比如询问应用场景、区别、性能优化等。确保问题有针对性,能够帮助用户进一步学习。</think>### ES6数组遍历方法及示例 ES6提供了多种数组遍历方法,每种方法适用于不同场景。以下是常用方法及示例: --- #### 1. **`forEach`方法** - **功能**:遍历数组元素,执行回调函数,**不返回新数组**。 - **示例**: ```javascript const arr = [1, 2, 3]; arr.forEach((element, index) => { console.log(`索引${index}的值是${element}`); }); // 输出: 索引0的值是1、索引1的值是2、索引2的值是3 ``` - **特点**:适合仅需遍历的场景,如打印或修改原数组[^1][^4]。 --- #### 2. **`map`方法** - **功能**:遍历数组并返回**新数组**,元素为回调函数返回值。 - **示例**: ```javascript const arr = [1, 2, 3]; const doubled = arr.map(x => x * 2); console.log(doubled); // 输出: [2, 4, 6] ``` - **特点**:不修改原数组,适合数据转换[^3]。 --- #### 3. **`filter`方法** - **功能**:返回符合条件的新数组。 - **示例**: ```javascript const arr = [1, 2, 3, 4]; const even = arr.filter(x => x % 2 === 0); console.log(even); // 输出: [2, 4] ``` - **特点**:用于筛选元素,如过滤无效数据。 --- #### 4. **`reduce`方法** - **功能**:遍历数组并**累积计算结果**。 - **示例**(求和): ```javascript const arr = [1, 2, 3]; const sum = arr.reduce((acc, cur) => acc + cur, 0); console.log(sum); // 输出: 6 ``` - **特点**:适合统计或聚合操作。 --- #### 5. **`some`与`every`方法** - **`some`**:判断**至少一个元素**满足条件。 ```javascript const arr = [1, 2, 3]; const hasEven = arr.some(x => x % 2 === 0); console.log(hasEven); // 输出: true ``` - **`every`**:判断**所有元素**满足条件。 ```javascript const allEven = arr.every(x => x % 2 === 0); console.log(allEven); // 输出: false ``` - **特点**:用于快速验证数组元素。 --- #### 6. **`find`与`findIndex`方法** - **`find`**:返回**第一个满足条件**的元素。 ```javascript const users = [{id:1}, {id:2}]; const user = users.find(u => u.id === 2); console.log(user); // 输出: {id: 2} ``` - **`findIndex`**:返回满足条件的元素**索引**。 ```javascript const index = users.findIndex(u => u.id === 2); console.log(index); // 输出: 1 ``` - **特点**:替代`for`循环查找场景。 --- #### 7. **`includes`方法** - **功能**:判断数组**是否包含某值**。 - **示例**: ```javascript const arr = [1, 2, 3]; console.log(arr.includes(2)); // 输出: true ``` - **特点**:简单值查找,不支持对象比较[^4]。 --- ### 方法对比表 | 方法 | 返回值 | 是否修改原数组 | 典型场景 | |------------|--------------|----------------|------------------------| | `forEach` | `undefined` | 否 | 遍历操作 | | `map` | 新数组 | 否 | 数据转换 | | `filter` | 筛选后数组 | 否 | 条件过滤 | | `reduce` | 累积值 | 否 | 统计或聚合 | | `some` | `boolean` | 否 | 存在性检查 | | `find` | 元素或`undefined` | 否 | 查找单个元素 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值