19

这是示例代码。我想打破(或继续)淘汰赛的 ko.util.arrayForEach。

ko.utils.arrayForEach(items, function (item) {
    if (...) break;
    if (...) continue;
}
4

3 回答 3

19

看起来你不能。这是arrayForEach的来源(来自KO GitHub页面上的utils.js )

arrayForEach: function (array, action) {
    for (var i = 0, j = array.length; i < j; i++)
        action(array[i]);
},

然而, Knockout 提供ko.utils.arrayFirst了将针对我们数组中的每个项目执行一个函数并返回函数计算结果为 true 的第一个项目。与filteredItems 计算的observable 类似,我们可以创建一个从搜索字段返回第一个匹配项:

//identify the first matching item by name
viewModel.firstMatch = ko.computed(function() {
    var search = this.search().toLowerCase();
    if (!search) {
        return null;
    } else {
        return ko.utils.arrayFirst(this.filteredItems(), function(item) {
            return ko.utils.stringStartsWith(item.name().toLowerCase(), search);
        });
    }
}, viewModel);

更多细节可以在这里找到http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html

于 2012-07-25T15:58:56.677 回答
9

似乎ko.utils.arrayFirstko.utils.arrayFilter将比您当前的方法更好地满足您的需求。

于 2012-07-25T11:48:09.690 回答
1

只需使用ko.utils.arrayFirst它将在 and 上执行一个函数,array并在评估为 true时立即返回/中断。function

这是我最近使用的真实示例

this.updateElement = function (model) {
    ko.utils.arrayFirst(that.list(), function (m) {
        if (model.formId() === m.formId()) {
            m.description(model.description());
            m.status(model.status());
            m.type(model.type());
        }
    });
}

更多细节可以在这里找到http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html

于 2018-05-16T15:09:46.080 回答