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

时间:2019-07-04 09:08:24

标签: javascript foreach knockout.js

如何使用循环将值添加到数组。我已经通过硬连接值将值添加到了数组中,但是我需要将大量数据添加到数组中,因此通过硬编码很难做到这一点。这是我的JS代码的一部分。

public class ABC
{
    @Column(name = "op_dt")
    @CreationTimestamp
    @UpdateTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    private Date opDt;
}

从今年到1900年,我需要向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

2 个答案:

答案 0 :(得分:3)

我建议创建一个帮助程序,该帮助程序首先在常规数组中返回一定范围的数字。然后,您可以使用助手来初始化您的可观察数组。

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>

答案 1 :(得分:1)

您可以这样做:

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
}

这不是最优雅的方法,但是如果您想使用循环,这就是您要怎么做。