2016-05-31 46 views
0

我有一個這樣的數組:獲取陣列類似項目的最大值使用Javascript

["13rq8", "13rq6", "13rq4", "13rq2", "13dl", "12dl", "13rq12", "13rq10"]

,我希望得到一個最終的陣列將組相似的價值觀,從彼此只通過改變的字符串( 「13rq8」, 「13rq6」, 「13rq4」, 「13rq2」, 「13rq12」, 「13rq10」)的最後一個號碼,只返回最大的值如下面的例子:

["13dl", "12dl", "13rq12"]

你能幫我解決這個問題嗎?腳本?

謝謝!

+5

您好,歡迎光臨到StackOverflow。你應該首先嚐試寫Javascript,然後解釋你的方法遇到了什麼問題,然後有人會幫助你。 – DavidS

+0

它們不僅僅是字符串的最後一個數字,而且也是中間的字母。 – Redu

+0

爲什麼你會認爲「13dl」和「12dl」比13rq(x)更粗? –

回答

0

使用對象(前tagNum)來跟蹤每個前綴的最大價值,並使用正則表達式來提取前綴和尾值:

var l = ["13rq8", "13rq6", "13rq4", "13rq2", "13dl", "12dl", "13rq12", "13rq10"]; 
 
var tagNum = {}; 
 

 
l.forEach(function(x) { 
 
    var m = x.match(/^(.*?)(\d*)$/); 
 
    var tag = m[1]; 
 
    var num = parseInt("0" + m[2]); 
 
    if (tagNum[tag] === undefined || tagNum[tag] < num) tagNum[tag] = num; 
 
}); 
 

 
var l2 = []; 
 
for (var tag in tagNum) { 
 
    var num = tagNum[tag]; 
 
    if (num) l2.push(tag + num); 
 
    else l2.push(tag); 
 
} 
 

 
console.log(l2);

+0

這會爲「13rq」返回兩個值,而不是一個。我認爲OP的「最後數字」包括所有的尾數字,而不僅僅是最後一個數字,你可能不應該認爲它們是以任何特定的順序。 – RobG

+0

@RobG,謝謝你的見解。它已被糾正。 – Fabricator

+0

這不工作 - 我訪問屬性時出錯! –