2013-08-03 37 views
-1

我想排序數組是這樣的:如何在javascript中使用字符和數字以某種方式對數組進行排序?

["AAAA1", "AAAA3", "ABAA2", "AAAA10", "AAAA100", "BBB2", "BBB10", "BBAA3", "BBB2AA"] 

當我對它進行排序,返回我喜歡:

["AAAA1", "AAAA10", "AAAA100", "AAAA3", "ABAA2", "BBAA3", "BBB10", "BBB2", "BBB2AA"] 

,我喜歡這樣的排序是:

["AAAA1", "AAAA3", "AAAA10", "AAAA100", "ABAA2", "BBAA3", "BBB2", "BBB2AA", "BBB10"] 

所以我在stackoverflow中搜索它,我發現像鏈接下的東西,但所有這一切沒有通用的方法排序字符&數字字符串,只有作品f或特殊問題!

javascript: sort an array a certain way with integers and characters

How to sort number in javascript sort method

How to sort an array of integers correctly

EDIT1:

請檢查在Sort JavaScript String Array containing numbers問題的答案,答案可與文本與格式VAR regex = /Value\s([0-9]+)/;和或Sort mixed alpha/numeric array答案只能在一開始就使用一個字符字符串..我需要一些方法與包含字符和數字的所有可能的字符串一起工作......!

EDIT2:

坦費利克斯·克林:

我真的很抱歉,我有錯爲了例如在陣列,所以我BBB10

我以前喜歡BBB2AA秩序發現一般的方法做到這一點,加上領先的零,我現在寫了一個版本,請優化它或給我另一種選擇排序這樣http://jsfiddle.net/Qd8nd/

+2

寫'函數mySortFunction(左,右) {}'如果'lhs'應該在'rhs'之前返回'-1',如果'rhs'應該在'lhs'之前'1',如果它們相等,則返回'0'。調用'yourArray.sort(mySortFunction)'。完成。 – DCoder

+1

[Sort JavaScript string contains contains numbers](http://stackoverflow.com/questions/3108530/sort-javascript-string-array-containing-numbers) – MightyPork

+1

[字母數字排序](http:// stackoverflow。com/questions/4340227/sort-mixed-alpha-numeric-array) – Praveen

回答

1

看起來你對數字的處理方式不同,具體取決於它們在字符串中出現的位置。如果它們在字符之間,看起來它們應該按字母順序進行比較,如果它們出現在最後,則應該用數字進行比較。請糾正我,如果我錯了,但否則我不能解釋爲什麼BBB10之前BBB2AA

這種問題沒有「通用方法」。你必須實現邏輯來自己比較這些值。即你必須將拆分其字符串和數字部分中的每個值和部分單獨比較:

function parseValue(v) { 
    // extract number (defaults to 0 if not present) 
    var n = +(v.match(/\d+$/) || [0])[0]; 
    var str = v.replace(n, ''); // extract string part 
    return [str, n]; 
} 

您可以使用該功能在.sort callback

arr.sort(function(a, b) { 
    a = parseValue(a); 
    b = parseValue(b); 

    // compare string part alphabetically 
    var result = a[0].localeCompare(b[0]); 
    // if the string part is the same, compare the number part 
    return result === 0 ? a[1] - b[1] : result; 
}); 
+0

tanQ,我有多個字符串和數字部分像BBB2AA,我寫它的問題..所以我試圖找到比較方法,我知道在JavaScript中排序我有比較問題,你用'localCompare'替換它請寫我真正的功能比較它,再次tanQ –

+0

函數在我的答案。你不明白的是什麼? –

+0

我找到了你的方法的答案,我們有這樣做的一般方法,只需要在字符串後面添加前導零到數字,請檢查http://jsfiddle.net/Qd8nd/ ..請更改您的asnwer並將其編輯爲接受它。 –

相關問題