循环遍历数组Array方法

297 阅读4分钟

循环遍历数组Array方法

数组几种遍历介绍(共同点:回调函数一样)应用场景回调执行次数函数返回值回调是否需要return
forEach遍历遍历数组== 原数组长度
map遍历映射数组== 原数组长度新数组(==)一定要return(当前元素)
filter遍历过滤数组== 原数组长度新数组(!=)return true(元素添加到新数组)
some遍历找出一个符合条件的元素!= 原数组长度布尔值true/falsereturn true;循环结束
every遍历判断所有元素是否符合条件!= 原数组长度布尔值true/falsereturn 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

应用:全选功能,只要有一个没有被选中,就取消全选按钮的选中状态.