Angularjs 在角JS中用括号过滤数字
我有一个类似这样的json数据 [{姓名:“abc”,计数:“(10)”,{姓名:“xyz”,计数:“(20)”},{姓名:“pqr”,计数:20}] 我使用绑定此数据,现在我想对Angularjs 在角JS中用括号过滤数字,angularjs,datatables,angularjs-filter,Angularjs,Datatables,Angularjs Filter,我有一个类似这样的json数据 [{姓名:“abc”,计数:“(10)”,{姓名:“xyz”,计数:“(20)”},{姓名:“pqr”,计数:20}] 我使用绑定此数据,现在我想对计数进行排序 按以下方式列出 更新 在下降过程中,应如下所示: 计数 (20) 二十 (10) 在提升中,它应该是 计数 (10) 二十 (20) 我尝试使用在我的表上定义的自定义过滤器实现相同的功能,如下所示 $scope.countFilter = function(item){
计数进行排序
按以下方式列出
更新
在下降过程中,应如下所示:
计数
(20)
二十
(10)
在提升中,它应该是
计数
(10)
二十
(20)
我尝试使用在我的表上定义的自定义过滤器实现相同的功能,如下所示
$scope.countFilter = function(item){
return parseInt(item.count.replace('(', item));
};
<table>
<thead>
<tr>
<th>Name</th>
<th>Count </th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in items |orderBy:'countFilter'">
<td>{{item.name}} </td>
<td>{{item.count}} </td>
</tr>
</tbody>
<table>
但它似乎并没有给我想要的结果
我的桌子如下
$scope.countFilter = function(item){
return parseInt(item.count.replace('(', item));
};
<table>
<thead>
<tr>
<th>Name</th>
<th>Count </th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in items |orderBy:'countFilter'">
<td>{{item.name}} </td>
<td>{{item.count}} </td>
</tr>
</tbody>
<table>
名称
计数
{{item.name}
{{item.count}
您应该创建一个自定义过滤器来对它们进行排序,而不是传递一个谓词函数(该函数只会根据返回值从数组中包含或排除项)
类似这样的东西可以工作。它使用array.prototype.sort
和一个自定义排序函数
angular.module('myApp', [])
.filter( 'bracketSort', function() {
return function ( inputArray ) {
// Look for brackets
var bracketRegex = /\(([0-9]+)\)/;
return inputArray.sort( function (a, b) {
var aBrackets = bracketRegex.exec(a);
var bBrackets = bracketRegex.exec(b);
// brackets mean a higher value
if(aBrackets && !bBrackets)
return 1;
else if (bBrackets && !aBrackets)
return -1;
else if (aBrackets)
return aBrackets[1] - bBrackets[1];
else
return a - b;
});
};
});
您可以这样使用它:
<tr ng-repeat="item in items | bracketSort">
我有一个有效的解决方案: 就像@Ed Hinchliffe的解决方案一样-
<tr ng-repeat="item in items | bracketSort:<true or false>">
更新
现在我更好地理解了这个问题,这是一个使用datatables
的解决方案
jQuery.fn.dataTableExt.oSort['brackets_nums-asc'] = function (x, y) {
xVal = x.toString().replace(/\((\d+)\)/, "-$1");
yVal = y.toString().replace(/\((\d+)\)/, "-$1");
return xVal - yVal;
}
jQuery.fn.dataTableExt.oSort['brackets_nums-desc'] = function (x, y) {
xVal = x.toString().replace(/\((\d+)\)/, "-$1");
yVal = y.toString().replace(/\((\d+)\)/, "-$1");
return yVal - xVal;
}
$(document).ready(function () {
$('#example').dataTable({
"sPaginationType": "full_numbers",
"bJQueryUI": true,
"bFilter": true,
"bRetrieve": true,
"bStateSave": true,
"aoColumns": [{}, {
"sType": "brackets_nums"
}]
});
})
我删除了角度过滤器,因为它不是必需的,所以基本上这个解决方案中唯一的角度就是使用ng repeat
。
但是它能工作!嗨,我试着使用你建议的过滤器。但是它给了我(10),(20),20的升序和降序(20),(10)。所以稍微修改一下过滤器函数?:)然后你就快到了…在@Ed Hinchliffe编写的代码中,只需将
return aBrackets[1]-bBrackets[1];
替换为return bBrackets[1]-aBrackets[1];
@yarons:我做了更改,但仍然没有效果。我尝试在控制台中打印aBrackets和bBrackets的值。它们总是null
。为什么会这样?为什么使用变量“a”和“b”?它们被赋值了吗?嗨。这是一个很好的解决方案。我尝试了使用它。它给我(10)、(20)升序:(…您是否在实际的数据表中进行了尝试。请检查此示例[.你可以像这里一样绑定数据并检查。你是如何使用升序的?对不起,我没有理解你。当我单击我的数据表列上的排序图标时,顺序就出现了。根据我得到的结果,我告诉你了顺序。你能用你的工作数据表链接到一个工作的JSFIDLE/plunkr吗?是的,请稍候,我会将链接发布到这里也一样