Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环遍历淘汰中的日期,并按月创建一组日期_Javascript_Knockout.js - Fatal编程技术网

Javascript 循环遍历淘汰中的日期,并按月创建一组日期

Javascript 循环遍历淘汰中的日期,并按月创建一组日期,javascript,knockout.js,Javascript,Knockout.js,我在服务器上生成了一个随机日期列表,并将其以json格式发送回一个敲除型viewmodel到observableArray()([01/02/2016,01/15/2016,02/04/2016,03/05/2016,等等…)中,我无法完全理解如何迭代这些日期并以html创建以下输出: January ------- 01/02/2016 01/15/2016 February ------- 02/04/2016 March ------- 03/05/2016 等等 我了解knocko

我在服务器上生成了一个随机日期列表,并将其以json格式发送回一个敲除型viewmodel到observableArray()([01/02/2016,01/15/2016,02/04/2016,03/05/2016,等等…)中,我无法完全理解如何迭代这些日期并以html创建以下输出:

January
-------
01/02/2016
01/15/2016

February
-------
02/04/2016

March
-------
03/05/2016
等等

我了解knockout中的基本foreach循环,以及动态输出html等等。最好的做法是为每个月创建一个可观察数组,然后在html中仅显示月份部分(如果该月的可观察数组长度>0)

var januaryArray = ko.observableArray();
var februaryArray = ko.observableArray();

<ul id="januaryList" data-bind="foreach: januaryArray, visible: januaryArray.length > 0">


    .....

<ul id="februaryList" data-bind="foreach: februaryArray, visible: februaryArray.length > 0">
.....
var januaryArray=ko.observableArray();
var februaryArray=ko.observableArray();
    .....
      .....

或者有没有更好、更简洁的方法用一些if语句来实现这一点?

下面是我使用ko.utils.arrayfilter做的一个例子

这是小提琴

下面是javascript

function model() {
  var self = this;
  this.dates = ['01/02/2016', '01/15/2016', '02/04/2016', '03/05/2016'];

  this.months = ko.observableArray([{
    name: 'January',
    value: '01'
  }, {
    name: 'February',
    value: '02'
  }, {
    name: 'March',
    value: '03'
  }]);

  this.filteredDates = function(data) {
    return ko.utils.arrayFilter(self.dates, function(item) {
      return item.substr(0, 2) === data.value;
    });
  };
}

var myViewModel = new model();

$(document).ready(function() {
  ko.applyBindings(myViewModel);

});
这是html

<ul data-bind="foreach: months">
  <li>
    <b data-bind="text: $data.name"></b>
    <ul data-bind="foreach: $root.filteredDates($data)">
      <li>
        <b data-bind="text: $data"></b>
      </li>
    </ul>
  </li>
</ul>

下面是我使用ko.utils.arrayfilter做的一个

这是小提琴

下面是javascript

function model() {
  var self = this;
  this.dates = ['01/02/2016', '01/15/2016', '02/04/2016', '03/05/2016'];

  this.months = ko.observableArray([{
    name: 'January',
    value: '01'
  }, {
    name: 'February',
    value: '02'
  }, {
    name: 'March',
    value: '03'
  }]);

  this.filteredDates = function(data) {
    return ko.utils.arrayFilter(self.dates, function(item) {
      return item.substr(0, 2) === data.value;
    });
  };
}

var myViewModel = new model();

$(document).ready(function() {
  ko.applyBindings(myViewModel);

});
这是html

<ul data-bind="foreach: months">
  <li>
    <b data-bind="text: $data.name"></b>
    <ul data-bind="foreach: $root.filteredDates($data)">
      <li>
        <b data-bind="text: $data"></b>
      </li>
    </ul>
  </li>
</ul>

您能否每月只筛选原始阵列。使用ko.utils.arrayFilter感谢用户2744722的评论。我在互联网上搜索了两天,寻找解决方案。当然,在发布此问题的几分钟后,我遇到了这样一个问题:我将在今晚晚些时候制定一个解决方案,如果这有助于解决我的问题,我将我会发布它,这样也许它可以帮助其他人!你能每月只过滤你的原始数组吗?使用ko.utils.arrayFilter感谢用户2744722的评论。我在互联网上搜索了两天,寻找解决方案,当然在发布这个问题几分钟后,我遇到了这样一个问题:今晚晚些时候我将研究一个解决方案,然后如果这有助于解决我的问题,我会张贴它,这样也许它可以帮助别人!