zoukankan      html  css  js  c++  java
  • 数组方法-forEach方法

    forEach 方法按升序为数组中含有效值的每一项执行一次callback 函数,那些已删除或者未初始化的项将被跳过(例如在稀疏数组上)。

    callback 函数会被依次传入三个参数:

    • 数组当前项的值
    • 数组当前项的索引
    • 数组对象本身

    如果给forEach传递了thisArg参数,当调用时,它将被传给callback 函数,作为它的this值。否则,将会传入 undefined 作为它的this值。callback函数最终可观察到this值,这取决于 函数观察到this的常用规则

    示例

    for 循环转换为 forEach

    转换之前

    const items = ['item1', 'item2', 'item3'];
    const copy = [];
    
    for (let i=0; i<items.length; i++) {
      copy.push(items[i])
    }

    转换之后

    const items = ['item1', 'item2', 'item3'];
    const copy = [];
    
    items.forEach(function(item){
      copy.push(item)
    });
    

    打印出数组的内容

    下面的代码会为每一个数组元素输出一行记录:

     1 function logArrayElements(element, index, array) {
     2     console.log("a[" + index + "] = " + element);
     3 }
     4 
     5 // 注意索引2被跳过了,因为在数组的这个位置没有项
     6 [2, 5, ,9].forEach(logArrayElements);
     7 
     8 // a[0] = 2
     9 // a[1] = 5
    10 // a[3] = 9
    11 
    12 [2, 5,"" ,9].forEach(logArrayElements);
    13 // a[0] = 2
    14 // a[1] = 5
    15 // a[2] = 
    16 // a[3] = 9
    17 
    18 [2, 5, undefined ,9].forEach(logArrayElements);
    19 // a[0] = 2
    20 // a[1] = 5
    21 // a[2] = undefined
    22 // a[3] = 9
    23 
    24 
    25 let xxx;
    26 // undefined
    27 
    28 [2, 5, xxx ,9].forEach(logArrayElements);
    29 // a[0] = 2
    30 // a[1] = 5
    31 // a[2] = undefined
    32 // a[3] = 9

    使用thisArg

    举个勉强的例子,从每个数组中的元素值中更新一个对象的属性:

     1 function Counter() {
     2     this.sum = 0;
     3     this.count = 0;
     4 }
     5 
     6 Counter.prototype.add = function(array) {
     7     array.forEach(function(entry) {
     8         this.sum += entry;
     9         ++this.count;
    10     }, this);
    11     //console.log(this);
    12 };
    13 
    14 var obj = new Counter();
    15 obj.add([1, 3, 5, 7]);
    16 
    17 obj.count; 
    18 // 4 === (1+1+1+1)
    19 obj.sum;
    20 // 16 === (1+3+5+7)

    因为thisArg参数 (this) 传给了forEach(),每次调用时,它都被传给callback函数,作为它的this值。

    注意:如果使用箭头函数表达式传入函数参数,thisArg 参数会被忽略,因为箭头函数在词法上绑定了this值。
     
     
    小练习:
     1 // 练习1: 遍历数组中的值,并计算总和
     2 var numbers = [1,2,3,4,5];
     3 var sum = 0;
     4 
     5 function adder(number){
     6   sum += number;
     7 }
     8 
     9 numbers.forEach(adder); //把函数adder放到forEach方法里面,numbers里面的数组 调用forEach方法的时候会把adder函数执行一边。
    10 console.log(sum); //15             
    11 //练习2
    12 [1, 2 ,3, 4].forEach(console.log); 
    forEach方法
  • 相关阅读:
    Eclipse检出原MyEclipse项目后 javax.servlet.http相关类都报错【我,体现着一类jar包问题的处理方法】
    Tomcat中加载不到项目 项目构建Deployment Assembly报错:The given project is not a virtual component project
    Unity手游之路<十一>资源打包Assetbundle
    Unity手游之路<十二>手游资源热更新策略探讨
    Unity手游之路<十三>手游代码更新策略探讨
    观察者(Observer)模式
    访问者(Visitor)模式
    设计模式(15)-Facade Pattern
    使用Monitor调试Unity3D Android程序日志输出(非DDMS和ADB)
    思维导图快捷键
  • 原文地址:https://www.cnblogs.com/gshao/p/9588911.html
Copyright © 2011-2022 走看看