在开发过程当中,我们碰到数组,不是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
}
}
}