javascript 中forEach方法

数组的forEach方法(IE9+支持)

返回:undefined
    forEach 方法按升序为数组中 含 有效值的每一项执行一次callback函数,那些已删除(使用daleta方法等情况) 或者未初始化的项将被跳过(但不包括那些指为undefined的项 ) ;
    方法接受一个回调函数,回调函数接受三个参数:当前项、索引、操作的数组

var array1 = ['a', 'b', 'c'];

array1.forEach(function(element) {
  console.log(element);
});
// a
// b
// c

forEach() 方法对数组的每个元素执行一次提供的函数。

 

案例: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)
});

       其结果都是

copy: ["item1", "item2", "item3"]

案例:打印出数组的内容

function logArrayElements(element, index, array) {
    console.log("a[" + index + "] = " + element);
}

// 注意索引2被跳过了,因为在数组的这个位置没有项
[2, 5, ,9].forEach(logArrayElements);

// a[0] = 2
// a[1] = 5
// a[3] = 9

[2, 5,"" ,9].forEach(logArrayElements);
// a[0] = 2
// a[1] = 5
// a[2] = 
// a[3] = 9

[2, 5, undefined ,9].forEach(logArrayElements);
// a[0] = 2
// a[1] = 5
// a[2] = undefined
// a[3] = 9


let xxx;
// undefined

[2, 5, xxx ,9].forEach(logArrayElements);
// a[0] = 2
// a[1] = 5
// a[2] = undefined
// a[3] = 9

forEach 遍历的范围在第一次调用 回调前就会确定。调用forEach 后添加到数组中的项不会被 回调 访问到。如果已经存在的值被改变,则传递给 回调的值是 forEach 遍历到他们那一刻的值。已删除的项不会被遍历到。如果已访问的元素在迭代时被删除了(例如使用 shift()) ,之后的元素将被跳过——看代码

var words = ["one", "two", "three", "four"];
words.forEach(function(word) {
  console.log(word);
  if (word === "two") {
    words.shift();
  }
});
// one
// two
// four

上面的代码不知道有看懂没有,是因为当你执行到two的时候删除数组的第一项,然而呢本来索引是 1 的项因为你把前面的项删掉了以后,索引就变成 0 了,而 0 你已经执行过了,所以并不会在执行一边,forEach 遍历的范围在第一次调用回调函数前就已经确定,已删除的项不会被遍历到。

在来看一个例子,只是在上面稍稍改动一下:

var words = ["one", "two", "three","", "four"];
words.forEach(function(word) {
words =  ["one", "two", "three","fix", "four"];
  console.log(word);
  
  if (word === "two") {
    words.shift();
  }
});
// one
// two
// three
//  
// four

上面索引为 3 的时候 输出的结果为空,即使是你已经给他重新赋值了一次,再来看下words的结果:

console.log(words)
// ["one", "two", "three", "fix", "four"]

以上就是我总结的,如果补充请大佬在联系我,疯狂给大佬打call❀❀❀

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值