欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
forEach()
 
foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。
 
foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。
 
foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。
 
await 不能用在 forEach 中:原因:那就是 forEach 只支持同步代码。
 
forEach 循环无法中途跳出,break 命令或 return 命令都不能奏效
 
forEach() 方法对数组的每个元素执行一次提供的函数。
 
var arr = ['a', 'b', 'c'];
 
arr.forEach(function(e) {
 
  console.log(e);
 
});
 
//输出结果
 
a;
 
b;
 
c;
 
forEach方法中的function回调有三个参数:
 
第一个参数是遍历的当前元素 (必需),
 
第二个参数是当前元素的索引值(可选),
 
第三个参数是当前元素所属的数组对象(可选)
 
forEach(function(value,index,array){
 
    // something
 
  });
 
 var arr = [1, 2, 3, 4];
 
 arr.forEach(console.log);
 
//    等价于:
 
 var arr = [1, 2, 3, 4];
 
 for (var k = 0; k < arr.length; k++) {
 
 console.log(array[k]);
 
    }
 
var arr = [1,2,3,4];
 
var sum =0;
 
arr.forEach(function(value,index,array){
 
 array[index] == value; //输出结果为 true
 
 sum+=value; 
 
 });
 
console.log(sum); 
 
//输出结果 10
 
forEach 循环无法中途跳出,break 命令或 return 命令都不能奏效
 
1、forEach不支持break
 
大家都知道,在使用for循环时可以使用break跳出循环,比如我希望找到数组中符合条件的第一个元素就跳出循环,这对于优化数组遍历是非常棒的。很遗憾,forEach并不支持break操作,使用break会导致报错。
 
let arr = [1, 2, 3, 4];
 
for (let i = 0; i < arr.length; i++) {
 
   console.log(arr[i]);
 
   if (arr[i] === 2) {
 
       break;
 
   };
 
};
 
//输出结果  1,2 
 
arr.forEach((self, index) => {
 
   console.log(self);
 
   if (self === 2) {
 
       break;
 
   };
 
});
 
//报错
 
2、forEach中使用return无效
 
首先需要确定的,直接再for循环中使用return会报错(函数中使用for可以return),forEach中使用return不会报错,但rerutn并不会生效,我们来看个例子:
 
 let arr = [1, 2, 3, 4];
 
 function find(array, num) {
 
     array.forEach((value, index) => {
 
         if (value === num) {
 
             return index;
 
         };
 
     });
 
 };
 
 let index = find(arr, 2);
 
 console.log(index);
 
 // 输出结果 undefined
 
上述代码想要找到数字2在数组中的索引,但return并不会起到终止代码运行并返回值的作用。
 
当然如果我们真的要用return返回某个值,那就只能将return操作放在函数中,而不是forEach循环中,像这样:
 
let arr = [1, 2, 3, 4];
 
function find(array, num) {
 
    let index_;
 
    array.forEach((value, index) => {
 
        if (value === num) {
 
            index_ = index;
 
        };
 
    });
 
    return index_;
 
};
 
console.log(find(arr, 2));
 
//输出结果 1
 
3、forEach删除自身元素index不会被重置
 
还记得文章开头的问题吗,那段代码其实只会执行一次,数组也不会被删除干净,这是因为forEach在遍历跑完回调函数后,会隐性让index自增,像这样:
 
let arr = [1, 2, 3, 4];
 
arr.forEach((value, index) => {
 
    arr.splice(index, 1);
 
    //这里隐性让index自增加1  
 
    index++;
 
});
 
console.log(arr);
 
//输出结果 [2,4]
 
4、forEach 并不改变原数组:
 
 let arr = [1, 2, 3, 4, 5];
 
 let a = arr.forEach(function(value, index, arr) {
 
     console.log(value)
 
//输出
 
 })
 
 console.log(a) //输出结果 undefined
 
 console.log(arr.toString())//输出 1,2,3,4,5
 
for与forEach的区别
 
for循环可以使用break跳出循环,但forEach不能。
 
for循环可以控制循环起点(i初始化的数字决定循环的起点),forEach只能默认从索引0开始。
 
for循环过程中支持修改索引(修改 i),但forEach做不到(底层控制index自增,我们无法左右它)。

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h64281.shtml