在Javascript中,循环完成后运行函数的更有效方法是

在Javascript中,循环完成后运行函数的更有效方法是,javascript,optimization,functional-programming,Javascript,Optimization,Functional Programming,假设我有以下Javascript代码: var i=0; 变量列表=['a','b','c']; for(列表中的var键){ //列表上的一些其他操作[键] //如果他们成功了 i=i+1; } if(i==list.length){ console.log(“循环完成”); }假设for循环中的操作的计算结果为true或false,则可以执行以下操作: function countSucceeded(list: any[], iteratee: (key: string) => bo

假设我有以下Javascript代码:

var i=0;
变量列表=['a','b','c'];
for(列表中的var键){
//列表上的一些其他操作[键]
//如果他们成功了
i=i+1;
}
if(i==list.length){
console.log(“循环完成”);

}
假设for循环中的操作的计算结果为true或false,则可以执行以下操作:

function countSucceeded(list: any[], iteratee: (key: string) => boolean): number {
    let count = 0;

    for (let i = 0; i < list.length; i++) {
        if (iteratee(list[i])) {
            count++;
        }
    }

    return count;
}

const list = ['foo', 'bar', 'baz'];
const test = (key: string): boolean => key.indexOf('foo') > -1;
const count = countSucceeded(list, test);

console.log(count); // 1

没有中断,您不需要检查计数。内部是否有一些异步操作?不清楚应该检查什么。解决方案将取决于内部发生的情况。所以,它只有在所有操作都成功时才会触发?在本例中,请尝试
if(.every(…)fn()
,否则可以。我发现您的代码片段是TypeScript。OP要求的是一个普通的JavaScript解决方案……这对我来说并不是一个复制粘贴解决方案。为了可读性,我使用了TypeScript,这样他可以更容易地看到我的函数参数发生了什么。@Lansana谢谢你的回答!我如何才能完全摆脱循环?@DmitryParanyushkin更新答案。使用带递归的分治以纯函数的方式循环。
function each(list, iteratee) {
    if (list.length == 0) {
            return;
    }

    iteratee(list.shift())

    return each(list, iteratee);
}

each([1, 2, 3], num => console.log(num)); // 1 2 3