循环遍历数组Array方法
| 数组几种遍历介绍(共同点:回调函数一样) | 应用场景 | 回调执行次数 | 函数返回值 | 回调是否需要return |
|---|---|---|---|---|
| forEach遍历 | 遍历数组 | == 原数组长度 | 无 | 无 |
| map遍历 | 映射数组 | == 原数组长度 | 新数组(==) | 一定要return(当前元素) |
| filter遍历 | 过滤数组 | == 原数组长度 | 新数组(!=) | return true(元素添加到新数组) |
| some遍历 | 找出一个符合条件的元素 | != 原数组长度 | 布尔值true/false | return true;循环结束 |
| every遍历 | 判断所有元素是否符合条件 | != 原数组长度 | 布尔值true/false | return true; 循环继续 |
0、for循环
1、数组索引号从0开始,所以 i 必须从0开始,i<arr.length
2、实例:利用for循环计算数组中所有元素的和以及平均值
<script>
var arr = [2, 6, 1, 7, 4];
var sum = 0;
var average = 0;
for (var i = 0; i < arr.length; i++) {
sum = sum + arr[i]; //加的是数组元素arr[i] 不是计数器i
}
average = sum / arr.length; // 20 / 5
console.log(sum, average); // 4
</script>
1. forEach( )
1、遍历数组获取每一个元素,没有返回值,不能使用return中止循环。
2、参数为一个函数,函数的形参1代表数组元素,形参2代表元素下标,形参2代表数字本身,三个参数均可选。
3、注意点:
- 回调函数执行次数==数组长度
- 数组中有多少个元素,回调函数就会执行几次
- forEach函数没有返回值,回调函数不需要return,就算手动return,也不会结束循环
const array = [1, 2, 3, 4];
array.forEach((item,index,arr) => {
item = item * 3
})
console.log(array); // [3, 6, 9, 12]
2.map( )
1、遍历数组,返回一个新数组,新数组的长度和原数组长度相等,数组由参数里的返回值组成,必须使用return
2、参数为一个函数,函数的形参1代表数组元素,形参2代表元素下标,形参2代表数字本身,三个参数均可选。
3、注意点:
- 回调函数执行次数 == 数组的长度;
- map函数返回的 新数组长度==原数组长度;
- 回调函数中一定要return,返回的是当前遍历的元素
/* 1. 需求:数组中的每一个元素+1 */
let arr = [23, 31, 60, 88, 90, 108, 260]
let arr1 = arr.map((value, index) => {
return value + 1 //让每个元素的值+1
})
console.log(arr1);//) [24, 32, 61, 89, 91, 109, 261]
/* 2.需求:超过100的商品打八折 */
let arr = [23, 31, 60, 88, 90, 108, 260]
let arr2 = arr.map((value,index)=>{
if(value>100){
return value* 0.8
}else{
return value;
}
})
console.log(arr2);// [23, 31, 60, 88, 90, 86.4, 208]
3. filter( )
1、返回一个新数组,新数组由参数条件为true的元素组成,过滤出符合条件的元素
2、参数为一个函数,函数的形参1代表数组元素,形参2代表元素下标,形参2代表数字本身,三个参数均可选。
3、注意点:
- 回调函数执行次数 == 数组的长度;
- filter 函数返回的新数组长度 !=原数组长度;
- 回调函数一定要return,返回一个布尔类型值,-
- 结果为true:当前遍历元素就会添加到新数组中;
- 结果为false:当前遍历元素不会添加到新数组中
/* 需求:找出数组中的偶数 */
let arr = [23, 31, 60, 88, 90, 108, 260]
let arr1 = arr.filter((item) => {
return item % 2 == 0
})
console.log(arr1)//[60, 88, 90, 108, 260]]
4. some
1、返回参数函数里符合条件的元素,只要检测到有一个元素符合条件就return,如果一个都没有,才返回false
2、参数为一个函数,函数的形参1代表数组元素,形参2代表元素下标,形参2代表数字本身,三个参数均可选。
3、注意点:
- 回调函数执行次数 != 数组长度
- some函数在遍历的时候可以中途结束
- some函数返回一个布尔类型值,可以直接给 disable 和 v-if 使用
- 回调函数返回布尔类型值用于结束遍历
- retuen true; 遍历结束,且some函数返回布尔值用于结束遍历 (默认)return false; //遍历继续,且some函数返回值为false
let arr = [ 'a', 'b', 'c', 'a' ]
let res = arr.some(function(item, index){
return item.index >= 2
});
console.log(res) ; // c
应用: 遍历购物车,判断商品id是否在购物车里存在,没有就加入id,有就增加数量
5. every
1、判断数组中所有的项是否满足要求,如果全都满足,才返回true,否则返回false(返回值为布尔值)
2、参数为一个函数,函数的形参1代表数组元素,形参2代表元素下标,形参2代表数字本身,三个参数均可选。
3、注意点:
- 回调函数执行次数 !=数组长度
- every函数返回一个布尔类型值,可以直接给 disable 和 v-if 使用
- 回调函数返回布尔值用于结束遍历
- return true; //遍历继续,且every函数返回值为true
- 默认return false; //遍历结束,且every函数返回值为false
let arr = [ 'a', 'b', 'c', 'a' ]
let res = arr.every(function(item, index){
return item.index >= 2
});
console.log(res) ; //false
应用:全选功能,只要有一个没有被选中,就取消全选按钮的选中状态.