对键数组中的值进行计数

Count values from array of keys

本文关键字:数组      更新时间:2023-09-26

>我有一个看起来像:

{
  "date": "01/01/2016",
  "duration": "duration : 1h30",
  "hour": "18:30",
  "subject": "subject",
  "price": "free",
  "link": "link",
  "link/_text": "something",
  "description": "something",
  "location": "somewhere"
},
{
  "date": "02/01/2016",
  "duration": "duration : 1h",
  "hour": "11:00",
  "subject": "subject",
  "price": "free",
  "link": "something",
  "link/_text": "something",
  "description": "something",
  "location": "somewhere"
},
{
  "date": ["26/01/2016","27/01/2016"],
  "duration": "duration : 2 days",
  "hour": "18:30",
  "subject": "subject",
  "price": "free",
  "link": "link",
  "link/_text": "something",
  "description": "something",
  "location": "somewhere"
}....

我想检测我什么时候有两天的事件。

使用

angularjs 和 ionicframework,我能够使用 {{countDates(event.date)}} 函数,如下所示:

$scope.countDates = function(eventObj) {
    return Object.keys(eventObj).length;
};

它通常返回唯一日期键的数量,所以当我获取 10 个项目时,它会返回 10...但在"to...from"日期它返回 2,所以我能够构建一个模板:

<div collection-repeat="event in events | limitTo:rssnb" class="item item-avatar item-text-wrap" ng-click="browse(event.link)">
    <div ng-if="countDates(event.date) == 2">
          <b>from</b> {{event.date[0]}} <b>to</b> {{event.date[1]}} </br>
          at {{event.hour}}<br />
     </div>
     <div ng-if="countDates(event.date) != 2">
          on the {{event.date}} at {{event.hour}}<br />
     </div> 
</div>

我认为是:

  • 脏。。。
  • 仅当我获取两个以上的项目时才会起作用。如果我获取 2 个项目,它将显示"来自...到..."在模板中,即使事件只有 1 天。

您能建议一种更好的方法来检测键值是唯一的还是双精度的吗?

多谢

YTS

我认为最好将 JSON 中的日期保留为类似于具有两个日期的数组:

{
  "date" : [...],
  ...
}

您可能想要更改代码:

<div ng-repeat="event in events | limitTo:rssnb" class="item item-avatar item-text-wrap" ng-click="browse(event.link)">
<div ng-if="countDates(event.date) > 1">
      <b>from</b> {{event.date[0]}} <b>to</b> {{event.date[1]}} </br>
      at {{event.hour}}<br />
 </div>
 <div ng-if="countDates(event.date) == 1">
      on the {{event.date[0]}} at {{event.hour}}<br />
 </div> 

但是如果你想要一个唯一的日期(如果这是你在问题中问的),那么你可能需要使用来自angular.filter模块的unique过滤器,它将给出唯一的值。

由于您使用的是 angular,因此您可以使用:

<div collection-repeat="event in events | limitTo:rssnb" class="item item-avatar item-text-wrap" ng-click="browse(event.link)">
    <div ng-if="angular.isArray(event.date) && countDates(event.date) == 2">
          <b>from</b> {{event.date[0]}} <b>to</b> {{event.date[1]}} </br>
          at {{event.hour}}<br />
     </div>
     <div ng-if="!angular.isArray(event.date) || (angular.isArray(event.date) && countDates(event.date) != 2)">
          on the {{event.date}} at {{event.hour}}<br />
     </div> 
</div>

但是,您还应该将ng-if中的所有逻辑移动到控制器以保持视图干净。