按数字排序为字符串 - AngularJS
Sorting by numbers as String - AngularJS
我想按 'numbers' 对 table 进行排序。 'numbers' 表示应用程序的版本号或它们的依赖项。它们看起来像“2.11.7”或“6.41.6”。因此,我无法将它们转换为数字。但是当像 String 一样处理它们时,angulars orderBy 不能正确地对它们进行排序。更具体地说:
- 2.11.5
- 2.11.5
- 2.11.7
- 2.11.7
- 2.11.5
将在 (DESC) 中结束
- 2.11.7
- 2.11.7
- 2.11.5
- 2.11.5
- 2.11.7
或(升序)
- 2.11.7
- 2.11.5
- 2.11.7
- 2.11.7
- 2.11.5
现在我卡住了。知道如何解决吗?
排序可以通过简单的方式完成javascript。这是一个改编自 的示例,用于对版本
进行排序
就AngularJs而言,要提供的order by also allows for a custom comparator。 Here 他们有一个带有自定义比较器的示例来对值进行排序。它所需要的只是使用类似于上述函数(或您自己的逻辑)的函数来提供自定义比较器。可以通过表达式本身通过传递 true/false.
来提供排序方向的标志
这里是plunker edited from their own example to provide for your values. Feel free to play around. This example will run properly in the Plunker environment。此处列出的代码用于文档
(function(angular) {
'use strict';
angular.module('orderByExample4', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.friends = [
{ name: 'John', favoriteLetter: '2.11.5' },
{ name: 'Mary', favoriteLetter: '2.11.5' },
{ name: 'Mike', favoriteLetter: '2.11.7' },
{ name: 'Adam', favoriteLetter: '2.11.7' },
{ name: 'Julie', favoriteLetter: '2.11.5' }
];
function pad(version) {
var paddingString = "0000000000";
return version
.split('.')
.map(function(majorMinorVersion) {
var index = paddingString.length - majorMinorVersion.length;
return paddingString.substr(0, index) + majorMinorVersion;
})
.join('.');
}
$scope.localeSensitiveComparator = function(v1, v2) {
// If we don't get strings, just compare by index
if (v1.type !== 'string' || v2.type !== 'string') {
return (v1.index < v2.index) ? -1 : 1;
}
var a = pad(v1.value);
var b = pad(v2.value);
return a.localeCompare(b);
};
}]);
})(window.angular);
我想按 'numbers' 对 table 进行排序。 'numbers' 表示应用程序的版本号或它们的依赖项。它们看起来像“2.11.7”或“6.41.6”。因此,我无法将它们转换为数字。但是当像 String 一样处理它们时,angulars orderBy 不能正确地对它们进行排序。更具体地说:
- 2.11.5
- 2.11.5
- 2.11.7
- 2.11.7
- 2.11.5
将在 (DESC) 中结束
- 2.11.7
- 2.11.7
- 2.11.5
- 2.11.5
- 2.11.7
或(升序)
- 2.11.7
- 2.11.5
- 2.11.7
- 2.11.7
- 2.11.5
现在我卡住了。知道如何解决吗?
排序可以通过简单的方式完成javascript。这是一个改编自
就AngularJs而言,要提供的order by also allows for a custom comparator。 Here 他们有一个带有自定义比较器的示例来对值进行排序。它所需要的只是使用类似于上述函数(或您自己的逻辑)的函数来提供自定义比较器。可以通过表达式本身通过传递 true/false.
来提供排序方向的标志这里是plunker edited from their own example to provide for your values. Feel free to play around. This example will run properly in the Plunker environment。此处列出的代码用于文档
(function(angular) {
'use strict';
angular.module('orderByExample4', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.friends = [
{ name: 'John', favoriteLetter: '2.11.5' },
{ name: 'Mary', favoriteLetter: '2.11.5' },
{ name: 'Mike', favoriteLetter: '2.11.7' },
{ name: 'Adam', favoriteLetter: '2.11.7' },
{ name: 'Julie', favoriteLetter: '2.11.5' }
];
function pad(version) {
var paddingString = "0000000000";
return version
.split('.')
.map(function(majorMinorVersion) {
var index = paddingString.length - majorMinorVersion.length;
return paddingString.substr(0, index) + majorMinorVersion;
})
.join('.');
}
$scope.localeSensitiveComparator = function(v1, v2) {
// If we don't get strings, just compare by index
if (v1.type !== 'string' || v2.type !== 'string') {
return (v1.index < v2.index) ? -1 : 1;
}
var a = pad(v1.value);
var b = pad(v2.value);
return a.localeCompare(b);
};
}]);
})(window.angular);