2014-07-06 23 views
0

我想在javascript中的数组上创建我自己的sort()函数。该函数应该期望列表中的以下字符串元素[0-9]*[A-Z][0-9]*[A-Z][0-9]*这意味着首先存在任意数量的数字0-9,然后是一个字母,随后是任意数字0-9,然后是一个字母,然后是最终任意数字0-9 。现在我想对这个列表进行排序,但是我想仅在Letters Only上对其进行排序。这意味着例如[xExCx,xQxEx,xSxEx,xSxFx]将在其排序的[xSxFx,xSxEx,xQxEx,xExCx]之后变成x又是0-9的任意数字。它会先排序第一个字母(倒退),然后是第二个字母。因此,字母E出现在A之前。或许你们任何一个聪明人都可以推动我朝着正确的方向前进,但我只得到了这一点。在javascript中创建自己的sort()函数

function sortList(listOfNames) { 
    var sortedListOfNames=new Array(); 
    for (i = 0; i < listOfNames.length; i++) { 
    //Sort listOfNames 
    } 
} 
+0

所以你要排序仅在字母反向:


这可以通过拉正则表达式执行的比较功能,所以它只是创建一次,在每个比较重用更有效率在字符串中?你想完全忽略字符串中任何位置的数字的数值或数量吗? – jfriend00

+0

你看过'sort'的回调吗? https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort如果您可以创建自定义字母比较的简单代码片段,则可以轻松编写一个回调,它。 – deceze

回答

2

您可以使用已经内置到数组中的排序逻辑并应用自定义比较函数。假设您的排序算法忽略字符串中的所有数字数字,并对字符串中剩余的字母字符进行反向排序,您可以像这样为Array对象内置的.sort()提供排序回调函数:

myArray.sort(function(a, b) { 
    a = a.replace(/\d/g, ""); 
    b = b.replace(/\d/g, ""); 
    return b.localeCompare(a);   
}); 

这将删除两个字符串中的所有数字,然后对两个字符串进行字符串比较并返回该结果。 .sort()方法然后基于该比较算法执行排序。您可以通过使用b.localeCompare(a)a.localeCompare(b),在localeCompare()声明中简单地交换ab来颠倒排序的顺序。

var nRegex = /\d/g; 
myArray.sort(function(a, b) { 
    a = a.replace(nRegex, ""); 
    b = b.replace(nRegex, ""); 
    return b.localeCompare(a);   
}); 
+0

非常感谢,正是我想要的=) – anders

+0

编辑,不要紧,我检查功能规格的代替。 – anders