Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AngularJS按字母顺序对用户输入进行排序_Javascript_Angularjs_Sorting_Angularjs Orderby - Fatal编程技术网

Javascript 使用AngularJS按字母顺序对用户输入进行排序

Javascript 使用AngularJS按字母顺序对用户输入进行排序,javascript,angularjs,sorting,angularjs-orderby,Javascript,Angularjs,Sorting,Angularjs Orderby,我构建了一个简单的基于引导的表单。收集的用户输入显示在页面底部(感谢AngularJS): 关键词 五个意大利关键词: 五个英文关键词: 我的五个意大利语关键词:{{keywordsIT1}}、{{keywordsIT2}}、{{keywordsIT3}、{{keywordsIT4}、{{{keywordsIT5} 我的五个英语关键词:{{keywordsEN1}、{{keywordsEN2}、{{keywordsEN3}、{{keywordsEN4}、{{keywordsEN5} 我建议您

我构建了一个简单的基于引导的表单。收集的用户输入显示在页面底部(感谢AngularJS):


关键词
五个意大利关键词:
五个英文关键词:
我的五个意大利语关键词:{{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