我想在javascript中在数组上创建自己的sort()函数。该函数应该期望列表中的以下字符串元素[0-9]*[A-Z][0-9]*[A-Z][0-9]*
这意味着首先有0-9的任意数字,然后有一个字母,后跟任意数字0-9,然后是一个字母然后最后任意数字0-9。现在我想对此列表进行排序,但我想在“仅限字母”上对其进行排序。这意味着,例如[xExCx,xQxEx,xSxEx,xSxFx]
将在其排序[xSxFx,xSxEx,xQxEx,xExCx]
之后变为其中x再次为x的任意数量。它将首先对第一个字母(向后)进行排序,然后对第二个字母进行排序。因此,字母E出现在A之前。也许你们这些才华横溢的人都可以给我一个正确的方向,我只能做到这一点。
function sortList(listOfNames) {
var sortedListOfNames=new Array();
for (i = 0; i < listOfNames.length; i++) {
//Sort listOfNames
}
}
答案 0 :(得分:2)
您可以使用已经内置到数组中的排序逻辑,只需应用自定义比较功能。假设你的排序算法是忽略字符串中的所有数字,只是对字符串中剩下的字母字符进行反向排序,你可以为这个Array对象中内置的.sort()
提供一个排序回调函数,就像这样:
myArray.sort(function(a, b) {
a = a.replace(/\d/g, "");
b = b.replace(/\d/g, "");
return b.localeCompare(a);
});
这将从两个字符串中删除所有数字,然后对两者进行字符串比较并返回该结果。然后.sort()
方法基于该比较算法执行排序。您可以使用a
或b
简单地在localeCompare()
语句中交换b.localeCompare(a)
和a.localeCompare(b)
来反转排序顺序。
通过将正则表达式从比较函数中拉出来可以提高效率,因此它只需创建一次并在每次比较中重复使用:
var nRegex = /\d/g;
myArray.sort(function(a, b) {
a = a.replace(nRegex, "");
b = b.replace(nRegex, "");
return b.localeCompare(a);
});