假设我有以下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
)。
实现相同任务的更有效方法是什么?
也许功能编程?
答案 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