我遇到以下问题:
我尝试对包含标识人(学生或教师),人员代码,人名,人员状态(活动,不活动,被阻止)的标志的人员列表进行排序。参与该房间的状态(活动,非活动和锁定),所有这些信息都在我称之为arrayVelhoAux的向量中。在这里,我想按字母顺序对此向量进行排序(A,B,C,D,E,...)。
arrayVelhoAux.FLG_IDENT_PESSO = arrayCursor[j].FLG_IDENT_PESSO;
arrayVelhoAux.COD_IDENT_PESSO = pessoa.COD_IDENT_PESSO;
arrayVelhoAux.TXT_NOMEX_PESSO = pessoa.TXT_NOMEX_PESSO;
arrayVelhoAux.FLG_STATU_PESSO = pessoa.FLG_STATU_PESSO;
arrayVelhoAux.FLG_STATU_PARTC = arrayCursor[j].FLG_STATU_PARTC;
arrayVelho.push(arrayVelhoAux);
为了完成这个向量,我做了一个循环,因为有其他表中的数据。在完成此向量之后,我执行.sort()以便对其进行排序。
arrayVelho.sort(compareArray);
在compareArray
函数中,只是现象更大。通过将所有字母大写放在所有字母的大小相同的大小。
function compareArray(a1,b1) {
if(a1.TXT_NOMEX_PESSO.toUpperCase() > b1.TXT_NOMEX_PESSO.toUpperCase()) return 1;
if(a1.TXT_NOMEX_PESSO.toUpperCase() < b1.TXT_NOMEX_PESSO.toUpperCase()) return -1;
return 0;
}
显然没有什么不对,有趣的事情发生了,因为,os正在比较一些,其他则不合时宜。如下图所示。
我想知道是否有更好的解决方案,或者是否会让这个解决方案100%正常运行。
答案 0 :(得分:3)
sort
函数的回调函数应返回-1
(或小于0
)或1
(或大于0
)或{{1} }。
因为您的返回布尔值,它被视为0
或1
和从不 0
。这就是为什么你的排序有时是错误的。
此处有更多信息https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
答案 1 :(得分:0)
您可以使用localeCompare
将字符串与sort
的正确返回值进行比较,如下所示:
function compareArray(a1,b1) {
return a1.TXT_NOMEX_PESSO.toUpperCase()
.localeCompare( b1.TXT_NOMEX_PESSO.toUpperCase() );
}