对键数组中的值进行计数
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中的所有逻辑移动到控制器以保持视图干净。
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 将数组从PHP传递到Javascript
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 在函数中添加数组元素的数值
- 无法通过数组映射绑定
- javascript中的数组出错
- 如何使用 node.js 比较两个 json 数组
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 根据id将json数组组合为一个json数组
- 如何通过数组更新角度子范围
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 在Javascript中转换对象数组
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串