Javascript 击倒JS:foreach,增量为2

Javascript 击倒JS:foreach,增量为2,javascript,knockout.js,Javascript,Knockout.js,在Knockout JS中,是否可以执行增量为2的foreach?类似于: for (var i = 0; i < array.length; i += 2) { // Do stuff } 但数据需要如下显示: <ul data-bind="foreach: facets"> <!-- Can this foreach be incremented by 2? --> <li>$data[$index]: $data[$index +

在Knockout JS中,是否可以执行增量为2的
foreach
?类似于:

for (var i = 0; i < array.length; i += 2) {
    // Do stuff
}
但数据需要如下显示:

<ul data-bind="foreach: facets"> <!-- Can this foreach be incremented by 2? -->
    <li>$data[$index]: $data[$index + 1]</li>
</ul>
  • $data[$index]:$data[$index+1]

任何帮助都将不胜感激。

这可能是您正在寻找的:

for (var i = 0; i < array.length; i += 2) {
    var sample = array[i];
    var number = array[i+1];
    var display = "<li>" + sample + ": " + number + "</li>" // display this
}
for(变量i=0;i”+sample+:“+number+”“//显示此
}

看起来您已经有了它,所以我不确定问题出在哪里…

您可以使用函数创建需要绑定到的结构:

 self.arrayFunc = function() {
    var result = [];

    for (var i = 0, length = array.length; i += 2) {
        result.push({first: array[i], second: [i + 1]};
    }

};

您可以为此编写一个自定义绑定处理程序,但我更愿意让模板免于这些丑陋的细节

我建议写一篇:

我的重复绑定()允许您指定
步骤
选项

<ul>
    <li data-bind="repeat: {foreach: facets, step: 2}"
        data-repeat-bind="text: facets[$index] + ': ' + facets[$index+1]">
    </li>
</ul>

淘汰赛在哪里?你在问什么?你的示例循环正好能做到这一点。问题出在哪里?保持模板逻辑自由总是一个好主意。您最好事先准备一个可导航的数据结构,并使模板不受此类实现细节的影响。这是一个简化的示例。这些数据实际上是从一个
$.ajax
调用返回的,我无法控制数据的格式。
function Model() {
    this.data = ko.observableArray(["Sample", 100, "Sample 2", 200])
    this.items = ko.computed(function() {
        var value = [];
        var data = this.data();
        for (var i=0; i<data.length; i+=2) {
            value.push({ key: data[i], value: data[i+1]);
        }
        return value;
    }, this);
}

var model = new Model();
<ul data-bind="foreach: items">
    <li><span data-bind="text: key"></span>: <span data-bind="text: value"></span></li>
</ul>
<ul>
    <li data-bind="repeat: {foreach: facets, step: 2}"
        data-repeat-bind="text: facets[$index] + ': ' + facets[$index+1]">
    </li>
</ul>