我遇到以下问题:
我尝试对包含标识该人(学生或教师)的标志、该人的代码、该人的姓名、该人的状态(事件、不活动、已阻止)和该人的状态的人员列表进行排序。该房间的参与状态(事件、非事件和锁定),所有这些信息都位于我称为 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;
}
显然没有任何问题,并且发生了一些有趣的事情,因为操作系统正在比较一些,其他的则乱序。如下图所示。
我想知道是否有更好的解决方案,或者是否可以让该解决方案 100% 正常运行。
最佳答案
sort
函数的回调函数应返回-1
(或小于0
)或1
(或大于0
)或0
。
因为您的返回 bool 值被视为 1
或 0
,并且从不 -1
。这就是为什么你的排序有时是错误的。
更多信息请点击 https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
关于javascript - 数组列表的排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36499093/