Javascript 使用AngularJS按字母顺序对用户输入进行排序
我构建了一个简单的基于引导的表单。收集的用户输入显示在页面底部(感谢AngularJS):Javascript 使用AngularJS按字母顺序对用户输入进行排序,javascript,angularjs,sorting,angularjs-orderby,Javascript,Angularjs,Sorting,Angularjs Orderby,我构建了一个简单的基于引导的表单。收集的用户输入显示在页面底部(感谢AngularJS): 关键词 五个意大利关键词: 五个英文关键词: 我的五个意大利语关键词:{{keywordsIT1}}、{{keywordsIT2}}、{{keywordsIT3}、{{keywordsIT4}、{{{keywordsIT5} 我的五个英语关键词:{{keywordsEN1}、{{keywordsEN2}、{{keywordsEN3}、{{keywordsEN4}、{{keywordsEN5} 我建议您
关键词
五个意大利关键词:
五个英文关键词:
我的五个意大利语关键词:{{keywordsIT1}}、{{keywordsIT2}}、{{keywordsIT3}、{{keywordsIT4}、{{{keywordsIT5}
我的五个英语关键词:{{keywordsEN1}、{{keywordsEN2}、{{keywordsEN3}、{{keywordsEN4}、{{keywordsEN5}
我建议您改用数组,因为它们更易于处理。这样,您只需对数组进行排序
,然后使用,
将数组中的元素连接起来。我正在使用filter
在排序之前过滤掉所有null
或undefined
值,以便忽略它们。使用localeCompare
并在sort
期间将字符串转换为小写,这样即使输入中有大写字母,也能正常工作
此外,由于意大利语单词包含重音/变音符号(例如è
或ò
),因此需要在对数组排序之前对输入进行规范化
下面是一个工作示例
angular.module('app',[])
.controller('ctrl',['$scope',($scope)=>{
$scope.keywordsIT=新数组(5);
$scope.keywordsEN=新数组(5);
$scope.sortKeywordsIT=函数(){
返回$scope.keywords
.filter(关键字=>!!关键字)
.map(关键字=>关键字.normalize(“NFD”))
.sort((k1,k2)=>k1.toLowerCase().localeCompare(k2.toLowerCase())
。加入(‘,’);
}
$scope.sortKeywordsEN=函数(){
返回$scope.keywordsEN
.filter(关键字=>!!关键字)
.sort((k1,k2)=>k1.toLowerCase().localeCompare(k2.toLowerCase())
。加入(‘,’);
}
}]);代码>
关键词
五个意大利关键词:
五个英文关键词:
我的五个意大利语关键词:{{sortKeywordsIT()}}
我的五个英语关键词:{{sortKeywordsEN()}}
我建议您改用数组,因为它们更易于处理。这样,您只需对数组进行排序
,然后使用,
将数组中的元素连接起来。我正在使用filter
在排序之前过滤掉所有null
或undefined
值,以便忽略它们。使用localeCompare
并在sort
期间将字符串转换为小写,这样即使输入中有大写字母,也能正常工作
此外,由于意大利语单词包含重音/变音符号(例如è
或ò
),因此需要在对数组排序之前对输入进行规范化
下面是一个工作示例
angular.module('app',[])
.controller('ctrl',['$scope',($scope)=>{
$scope.keywordsIT=新数组(5);
$scope.keywordsEN=新数组(5);
$scope.sortKeywordsIT=函数(){
返回$scope.keywords
.filter(关键字=>!!关键字)
.map(关键字=>关键字.normalize(“NFD”))
.sort((k1,k2)=>k1.toLowerCase().localeCompare(k2.toLowerCase())
。加入(‘,’);
}
$scope.sortKeywordsEN=函数(){
返回$scope.keywordsEN
.filter(关键字=>!!关键字)
.sort((k1,k2)=>k1.toLowerCase().localeCompare(k2.toLowerCase())
。加入(‘,’);
}
}]);代码>
关键词
五个意大利关键词:
五个英文关键词:
我的五个意大利语关键词:{{sortKeywordsIT()}}
我的五个英语关键词:{{sortKeywordsEN()}}
非常感谢,@nash11!您的解决方案工作得很好,但这种方法的缺点是.sort()
方法区分大小写。因此,如果您键入:{{keywordsEN1}}}=newyork
,{keywordsEN2}}}=city
,{keywordsEN3}}=town
,{keywordsEN4}=美国
,{keywordsEN5}}=美国
,结果将是:美国
,纽约
,,,,,,城镇
。不如注入一个orderBy
过滤器?我无法通过我自己的…@Gianluca来正确修改您的代码-我已经编辑了我的答案,因此排序是通过在比较字符串之前将字符串转换为小写来进行的。这应该对你有用:)现在它就像一个符咒,谢谢你!:-)为了记录在案,我最终使用orderBy
方法修改了您的第一个代码;我不确定从风格的角度看它是否“干净”,但是。。。它也很管用!;-)<代码>angular.module('app',[])控制器('ctrl',['$scope','orderByFilter',函数($scope,orderBy){$scope.keywordsIT=new Array(5);$scope.keywordsEN=new Array(5);$scope.sortKeywordsIT=function(){return orderBy($scope.keywordsIT)。过滤器(关键字=>!!关键字)。映射(关键字=>keyword.normalize(“NFD”)。连接(','));}$scope.sortKeywordsEN=fun