如何使用 foreach 将值设置为数组

How to set values to array using foreach

如何使用循环向数组添加值。我已经通过硬编码值向数组添加了值,但我需要向 array.so 添加大量数据,这很难通过硬编码实现。我的这部分 JS 代码。

function BModel(checkInOrEdit) {
    "use strict";
    this.Number = ko.observable("");
    this.Years = ko.observableArray(['', '2019', '2018', '2017', '2016', '2015', '2014', '2013', '2012', '2011', '2010', '2009', '2008', '2007', '2006', '2005', '2004', '2003', '2002', '2001', '2000']);
}

BModel.prototype = {

    addTo: function (isSupervised) {
        "use strict";
        this.fname($.trim(this.fname()));
        this.lname($.trim(this.lname()));

    },

    AcDone: function (result, stat) {
        "use strict";
        var validationResults = JSON.parse(result.d);
        var msgTitle = '';
    }
}


$(document).ready(function () {

});

我需要为 Years 添加值,因为今年到 1900.how 我可以这样做吗?目前,我很难受。

this.Years = ko.observableArray(['', '2019', '2018', '2017', '2016', '2015', '2014', '2013', '2012', '2011', '2010', '2009', '2008', '2007', '2006', '2005', '2004', '2003', '2002', '2001', '2000']);

你可以这样做:

function BModel(checkInOrEdit) {
  "use strict";
  this.Number = ko.observable("");
  this.Years = ko.observableArray();
  let lyears = [];
  for (let i = 1900; i <= new Date().getFullYear(); i++) { 
    lyears.push(i);
  }
  this.Years(lyears); // see comments
}

这不是最优雅的方式,但如果您想使用循环,您可以这样做。

我建议先创建一个 returns 常规数组中一系列数字的助手。然后,您可以使用助手来初始化您的可观察数组。

推送到 foreach 中的可观察数组可能会有重绘 DOM 很多很多次的风险!

下面是一个 range 帮助程序(可以重构为更简洁)和一个可观察数组的示例:

function range(from, to) {
  const dir = to > from ? 1 : -1
  return Array.from(
    Array(Math.abs(to - from) + 1),
    (_, i) => from + dir * i
  )
};

const years = ko.observableArray(
  [""].concat(range(new Date().getFullYear(), 1900))
);

ko.applyBindings({ years });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: years">
  <li data-bind="text: $data"></li>
</ul>