首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

array.push在forEach循环内不工作

在JavaScript中,array.push是用于向数组末尾添加一个或多个元素的方法。然而,在使用array.push方法时,需要注意在forEach循环内部使用它可能会导致意外的结果。

forEach是一个用于遍历数组的方法,它会对数组中的每个元素执行提供的回调函数。然而,forEach方法是同步执行的,而array.push方法是异步执行的。这意味着,在forEach循环内部使用array.push方法时,可能会出现以下问题:

  1. 顺序问题:由于array.push是异步执行的,循环内部的array.push操作可能会在循环结束后才执行,导致元素的添加顺序与预期不符。
  2. 重复问题:如果在forEach循环内部使用array.push方法向数组中添加元素,循环可能会多次遍历数组,导致元素被重复添加。

为了解决这个问题,可以使用其他方法来替代forEach循环内部的array.push操作。以下是一些可能的解决方案:

  1. 使用map方法:map方法会创建一个新数组,其中包含对原始数组中的每个元素应用提供的回调函数后的结果。通过在map方法中返回需要添加的元素,可以避免使用array.push方法。
代码语言:txt
复制
const newArray = originalArray.map(item => {
  // 在这里返回需要添加的元素
});
  1. 使用reduce方法:reduce方法会将数组中的每个元素按照提供的回调函数进行累积计算,并返回最终结果。通过在reduce方法中将需要添加的元素累积到一个新数组中,可以避免使用array.push方法。
代码语言:txt
复制
const newArray = originalArray.reduce((accumulator, item) => {
  // 在这里将需要添加的元素累积到accumulator中
  return accumulator;
}, []);

总结起来,为了避免在forEach循环内部使用array.push方法导致的问题,可以考虑使用mapreduce方法来替代。这样可以确保元素的添加顺序和次数符合预期。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ES6数组常用方法总结[通俗易懂]

一、常规数组循环 let arr = [1,2,3]; for(let i = 0;i<arr.length;i++){ //条件判断或操作数组 return ; 可以return 值 } 二、ES6数组方法 1、array.forEach() 循环遍历数组中的每一项 let arr = [1,2,3] array.forEach((item,index)=>{ //数组操作 不能return 值 }) 2、array.map() map方法和forEach每次执行匿名函数都支持3个参数,参数分别是item(当前每一项)、index(索引值)、arr(原数组),但是map返回一个新数组,原数组不影响; let arr = [1,2,3]; let arr2 = arr.map((iitem,index)=>{ if(item==1){ return true; }else{ return false; //通过return 返回想要的东西 } }) 结果arr2 = [true,false,false] arr = [1,2,3] 3、array.filter 筛选数组中符合条件的项,返回一个新数组 let arr = [1,2,4]; let result = arr.filter((item,index)=>{ return item>2; }) 结果 result 为 [4] 4、array.some()和array.every() 想执行一个数组是否满足什么条件,返回一个布尔值,这时forEach和map就不行了,可以用一般的for循环实现,或者用array.every()或者array.some(); (1)array.some() 类似于或 some()方法用于检测数组中的元素是否有满足条件的,若满足返回true,否则返回false 注意:1、不会对空数组检测 2、不会改变原始数组 let arr = [1,2,4]; let result = arr.some((item,index)=>{ return item>2; }) 结果 result 为true (2) array.every() 类似于与 用于检测数组中所有元素是否都满足条件,若满足返回true,否则返回false let arr = [1,2,4]; let result = arr.every((item,index)=>{ return item>2; }) 结果 result 为false 5、array.find() find()方法只会找到第一个符合的,找到之后就会直接返回,就算下面还有符合要求的,也不会再找下去 let arr = [1,1,2,4]; let result = arr.find((item,index)=>{ return item>=2; }) 结果 result 为2 6、array.reduce() reduce((sum,item)=>{…},0)要有两个参数,第一个参数一定要初始化 let arr = [{name:‘张三’,index:0},{name:‘李四’,index:1}]; let result = arr.((array,item)=>{ array.push(item.name) return array;; },[ ]) 结果 result 为[‘张三’,‘李四’]

01

ES6新特性以及一些规范

` class goodStudent extends Student { sayAge() { console.log(this.age) } } let goodStu = new goodStudent("CJG", 20, "SYSU); goodStu.sayAge() // 20 6.3方法可以通过返回this来实现方法链式调用 class Person { setName(name) { this.name = name; return this; } sayName() { console.log(this.name); return this } } 这样,我们就可以直接链式调用它的方法了 let p = new Person() b.setName("cjg").sayName().setName("zht").sayName() 6.4使用class的时候,如果你没有声明构造函数的话,它会自己提供默认的构造函数,如果你不需要在构造函数做额外的事情(例如给某个变量赋值等),就没必要主动声明构造函数 //bad,没有必要,这是系统默认的 class goodStudent extends Student { constructor(...args) { super(...args); } } //good 如果需要在构造函数做额外的工作,则主动声明构造函数 class goodStudent extends Student { constructor(...args) { super(...args); this.age = 22; } }

01
领券