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

时间:2018-04-09 13:15:46

标签: javascript optimization functional-programming

假设我有以下Javascript代码:



    var i = 0;

    var list = ['a','b','c'];

    for (var key in list) {
        
        // some other operations on list[key]

        // in case they are successful
        i = i + 1;
        
    }

    if (i == list.length) {
        console.log('cycle complete');
    }




这个想法是在循环完成后触发某个函数(在这种情况下为console.log)。

实现相同任务的更有效方法是什么?

也许功能编程?

1 个答案:

答案 0 :(得分:1)

假设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

现在它是&#34;功能性&#34;,尽管你也可以摆脱循环。

更新

以下是如何以纯函数方式完成循环:

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