// temp data
var array = [1,2,function() { }, 3, function() { }];
var cb = function() { console.log("foo"); }
var found = false;
console.log(_.map(array, function(val) {
if (_.isFunction(val) && !found) {
return found = true, _.compose(cb, val);
}
return val;
}));
这循环遍历数组并将它找到的第一个函数转换为组合函数。
我讨厌found = false
变量/计数器。我该如何摆脱它?
作为算法。
let found be 0
map value in array
if value satisfies condition and found is 0
let found be 1
return mutate(value)
else
return value
更新
使用for循环
for (var i = 0; i < array.length; i++) {
if (_.isFunction(array[i])) {
array[i] = _.compose(cb, array[i]);
break;
}
}
答案 0 :(得分:3)
我不知道这是否能满足您对优雅的需求,但在我看来_.each()
或forEach
在找到该项目后会浪费额外的循环。使用传统的for
或while
循环,您可以在此时调用break
。对于小型阵列而言,这不是什么大问题,但它可能成为更大阵列或复杂条件检查的问题。如果你想避免常量array[x]
引用,你可能会比显而易见的选择更加迷人:
for (var val, x=0; x<array.length; val=array[++x]) {
if (_.isFunction(val)) {
array[x] = _.compose(cb, val);
break;
}
}
答案 1 :(得分:1)
假设短路评估:(我及时推迟)
let found be 0
for each value in array
if value satisfies condition and found is 0 and let found be not found
let value be mutate(value)
编辑问题,编辑答案:
let found be 0
for each value in array
return ( value satisfies condition and found is 0 and let found be not found ) ? mutate(value) : value