2014-07-06 25 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