有什么优雅的 forEach 的完成回调的写法

传统的写法应该就是对比 index 和 length

myArray.forEach((value, index, array) => {
    index === array.length - 1 && (
        // 回调
    )
})

有没有什么比较优雅的方法呢? 总觉得这样写有点 low

阅读 6.5k
6 个回答

可以理解为在循环过程中,满足某个条件提前退出?提前退出可以试试 every some findIndex

findIndex、every 在遇到第一个 false , some 在遇到第一个 true 都会提前退出

array.every((value, index, array) => {
    if (condition) {
        // do something
        return false
    }
    return true
})

不需要判断啊,完成后自动结束啊

额,我不知道你的真实意图是什么,但我理解到的意思是,你遍历结束后,要执行一个回调: 这个遍历是同步的。
除非你遍历中每个动作是异步的,那可以用Promise
不过,遍历是同步的。

myArray.forEach(...);
// 循环完成后的事情写在这里

如果要判断循环是否中断,可用 every 代替 forEach, 中断的情况返回 false

if (myArray.every(...)) {
    // 循环完成后的事情
} else {
    // 循环中断的情况
}

在结尾链式操作一个end
优雅不?

Array.prototype.forEach = function(fn){
  var _this = this;
  for (var k = 0, length = this.length; k < length; k++) {
     fn(this[k],k,this)
    }
    return {
        end:function(fn){
            fn(_this);
        }
    };
}

var d = [1,2,3];
d.forEach((v,i,a)=>{ console.log(v)}).end(function(arr){console.log(arr)})
>> 1
>> 2
>> 3
>> [1, 2, 3]

array.oncomplete = (param) => {

console.log('length = ' + param.detail);

}

array.forEach((item, index, arr) => {

if(index === arr.length - 1){
    let myevt = new CustomEvent('complete', {detail: arr.length});
    arr.dispatchEvent(myevt);
}

});

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题