数组当中forEach怎么跳出循环??

156 阅读1分钟

在开发过程当中,我们碰到数组,不是forEach,map,splice...等等一堆的数组操作,但!但!但!通常在遍历的时候,总是想干点什么,比如数组当中有N个用户信息,我现在点击某个列表,拿到用户id,但是我想在找到之后就结束循环,但!啊啊啊,forEach刹不住车,不听使唤,怎么回事,我们一起来看看趴~

先来看看forEach 实现逻辑

Array.prototype.customForEach = function (fn) { 
    for (let i = 0; i < this.length; i++) 
        { 
            fn.call(this, this[i], i, this)
        } 
}

为什么说它跳不出

forEach 内侧嵌套着一个函数,即使你retrun 也无法阻断外面的for循环执行

- forEach 内侧嵌套着一个函数,即使你retrun 也无法阻断外面的for循环执行
- 例如
function demo(){
    return 'demo' 
} 

function demo2(){ 
    demo() 
    return 'demo2' 
} 

demo()

demo函数返回的结果 跟demo2无关

当然,也不是没有办法,如果想杠的话


let list = [1,2,3,4,5]

try {
    list.forEach((item, index, list) => {
        if (index === 2) {
            throw new Error('demo')
        }
        console.log(item)
    })
} catch (e) {
    // console.log(e)
}



let list = [1,2,3,4,5]

 list.forEach((item, index, list) => {
       list.length = 0 // 直接把数组置空
        console.log(item)
    })
}

let list = [1,2,3,4,5]

 list.forEach((item, index, list) => {
       list.splice(1,list.length - 1)
        console.log(item)
    })
}

正常的做法

 const fn = () => {
    const arr = [1, 2, 3, 4]
    for (let i = 0; i < arr.length - 1; i++) {
      console.log('i', i, 'arr[i]', arr[i])

      if (arr[i] === 3) {
        return false
      }
    }
  }

image.png

下课