Angularjs order通过对问题进行排序,即在8之前对10进行排序
Angularjs orderBy sorting issues - ie, sorts 10 before 8
我正在开发这个应用程序,它应该对py IP地址进行排序,所以为了解决按字符串排序的问题,我将IP地址分成八位字节,并尝试按每个八位字节连续排序。但当Angularjs的"orderBy"函数应用于我的数据时,我遇到了一些问题:
<tr ng-hide="row.length" class="tablehover tr-list" ng-repeat="row in entries | filter:search | orderBy:['ipA','ipB','ipC','ipD']">
<td class="table-item col-1 col"><img ng-src="./img/{{row.health}}" class="status-color"></td>
<td class="table-item col-2 col text-ip">{{ row.ipaddr }}</td>
<td class="table-item col-3 col">{{ row.nickname }}</td>
<td class="table-item col-4 col text-dns">{{ row.dnsname }}</td>
<td class="table-item col-5 col text-type">{{ row.type }}</td>
<td class="table-item col-6 col"><center><img ng-src="./img/{{row.reserved}}" class="status-reserved"></center></td>
<td class="table-item col-7 col"><div id="editBtn" class="flat icon" name="editBtn" ng-model="editBtn" type="button" ng-click="edit(row)"><img src="./img/edit.png" class="inline-icon edit"></button></div>
<td class="table-item col-8 col"><div id="deleteBtn" class="flat icon" name="deleteBtn" value="./img/delete.png" ng-click="delete(row)"><img src="./img/cancel.png" class="inline-icon delete"></div></td>
<!-- these are for sorting purposes only -->
<td class="hidden">{{ row.subnet }}</td>
<td class="hidden">{{ row.location }}</td>
<td class="hidden">{{ row.vlan }}</td>
<td class="hidden">{{ row.notes }}</td>
<td class="">{{row.ipA}}.{{row.ipB}}.{{row.ipC}}.{{row.ipD}}</td>
</tr>
理论上,这应该像一样订购
1.1.1.1
8.8.8.8
10.10.10.10
但实际上它的订单是这样的:
1.1.1.1
10.10.10.10
8.8.8.8
我想避免将八位字节转换为三位数整数(即001.001.001.001);我觉得这应该是一件容易的事情,而我只是把一些简单的事情搞砸了。
我已经尝试过的东西:
迫使angular将每个八位字节视为一个数字(不起作用)
{{ row.ipA | number }}
当每个新记录保存到DB:时,将每个八位字节转换为浮点
var octets = ($scope.ipaddr).split(".");
$scope.ipA = parseFloat(octets[0]);
$scope.ipB = parseFloat(octets[1]);
$scope.ipC = parseFloat(octets[2]);
$scope.ipD = parseFloat(octets[3]);
谢谢!
尝试这样做:
在控制器中添加以下功能:
$scope.ipOrder = function(row){
return (
(parseInt(row.ipA)*Math.pow(256,3))+
(parseInt(row.ipB)*Math.pow(256,2))+
(parseInt(row.ipC)*256)+
parseInt(row.ipD));
}
然后在你的ng-repeat
中这样做:
ng-repeat="row in entries | filter:search | orderBy:ipOrder
工作示例
是否尝试将八位字节转换为Number()?
row.ipA=数量(八位字节[0]);
相关文章:
- 如何按名称对四方形场地进行排序(即排序
- 为什么这个排序功能在 Safari 中不起作用
- 按“Levenshtein Distance”对数组进行排序,在Javascript中具有最佳性能
- 谷歌cookie是否存在于chrome,火狐,即在phantomjs中发出某些请求时发送的浏览器
- AngularJS - 在服务内部对数组进行排序,在控制器/视图中保留绑定
- 表过滤,排序,在html中使用jquery/javascript/css进行区分记录
- 使用 UI 可排序,在单击按钮时根据给定值将项目移动到新位置
- 使高图工具提示显示最靠近左侧的点的信息(即在中点不更改)
- 转义单引号,即在双引号中的单引号
- 数据排序应该在客户端还是服务器上完成
- 将表排序保存在本地存储中
- 修改合并排序以在 JavaScript 中计算反转
- 表排序器在 jquery 页面加载后变得不起作用
- 排序按钮在Backbone.js中不起作用
- Jquery可排序功能在Android中不起作用
- Angularjs order通过对问题进行排序,即在8之前对10进行排序
- 排序标记在谷歌地图根据用户的位置
- 排序结果在JSON变量按整数
- 我使用javascript的排序函数在角范围内的一个if条件.我的条件是假的,但它还是要进去
- 为什么这个下拉列表的排序工作在Internet Explorer,而不是在Chrome