2013-04-24 35 views
0

保持数字和特殊字符我按字母顺序排序的数组使用此:数组排序按字母顺序,在结束

contactList.sort((function(index){ 
     return function(a, b){ 
      return (a[index] == b[index] ? 0 : (a[index] < b[index] ? -1 : 1)); 
     }; 
    })(2)); 

它的伟大工程,唯一的问题是,数字和特殊字符显示在顶部我的阵列。我希望它按字母顺序排序,但我也希望它在最后存储数字&特殊字符。

我真的不知道如何修改我的功能,以便做到这一点。

回答

2

只需检查,他们是否是字母或不是。 我只检查第一个字符,但是也许您需要延长此检查以检查案例 a[index].charAt(0) == b[index].charAt(0)以比较以下字母等等。

contactList.sort((function(index){ 
    return function(a, b){ 
     var aIsLetter = a[index].charAt(0).match(/[a-z]/i), 
      bIsLetter = b[index].charAt(0).match(/[a-z]/i); 
     if (aIsLetter && !bIsLetter) return -1; 
     if (!aIsLetter && bIsLetter) return 1; 
     return (a[index] == b[index] ? 0 : (a[index] < b[index] ? -1 : 1)); 
    }; 
})(2)); 
+0

很好用。尽管事实证明aIsLetter &&!bIsLetter应该返回-1,反之亦然。我不能编辑你的代码,因为它少于6个字符,所以如果你可以自己编辑它。非常感谢你。 – 2013-04-24 11:02:21

+0

嗨,索引参数有什么用?似乎是多余的。函数(a,b){a = a.toLowerCase(); b = b.toLowerCase(); (0).match(/ [a-z]/i), varIIsLetter = a.charAt(0).match(/ [a-z]/i)如果(aIsLetter &&!bIsLetter)返回-1; (!aIsLetter && bIsLetter)返回1; return(a == b?0:(a Alon1980 2014-09-23 08:13:40