排列数组列表的问题

时间:2016-04-08 12:04:29

标签: javascript jquery arrays

我遇到以下问题:

我尝试对包含标识人(学生或教师),人员代码,人名,人员状态(活动,不活动,被阻止)的标志的人员列表进行排序。参与该房间的状态(活动,非活动和锁定),所有这些信息都在我称之为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正在比较一些,其他则不合时宜。如下图所示。

Problems with the ordination of a list of array

我想知道是否有更好的解决方案,或者是否会让这个解决方案100%正常运行。

2 个答案:

答案 0 :(得分:3)

sort函数的回调函数应返回-1(或小于0)或1(或大于0)或{{1} }。

因为您的返回布尔值,它被视为01从不 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() );
}