javascript - 让简单的搜索算法更优雅

标签 javascript algorithm underscore.js ecmascript-5

// 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;
    }
}

_.map , _ , _.isFunction , _.compose

最佳答案

我不知道这是否满足了您对优雅的需求,但在我看来,_.each()forEach 在项目之后浪费了额外的循环已被发现。使用传统的 forwhile 循环,您可以在该点调用 break。对于小阵列来说没什么大不了的,但对于更大的阵列或复杂的条件检查来说,这可能会成为一个问题。如果你想避免常量 array[x] 引用,你可能会比明显的选项更漂亮:

for (var val, x=0; x<array.length; val=array[++x]) {
    if (_.isFunction(val)) {
        array[x] = _.compose(cb, val);
        break;
    }
}

关于javascript - 让简单的搜索算法更优雅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6023855/

相关文章:

javascript - 拖放后如何将图像上传到服务器

javascript - 使用 Node-schedule 安排作业

javascript - 在 Ember 2.16 中创建利用 window.confirm() 的集成测试?

algorithm - 帮助理解交叉验证和决策树

javascript - 如何在 JavaScript 中对不同的 ID 使用相同的函数?

python - SQLAlchemy:合并重复标签的有效方法

javascript - 将两个数组(键和值)合并到一个对象中

javascript - 使用 underscore.js 比较两个具有未定义值的对象

javascript - 使用 _.reject 将我的对象变成一个数组

algorithm - 选择有约束的排列