2016-05-03 26 views
1

我已經編寫了用於確定字符串數組中第n個最長字符串的代碼。下面我列出了Codewars kata中列出的測試用例。第n個最長的字符串排序

說明實現,你將獲得一個字符串數組,然後數組中返回第n個最長的字符串函數最長(陣列,N)。例如arr = ['Hello','World','Codewars','Katas'] n = 3;應該返回'World',因爲'Codewars'的長度= 8,'Hello'長度= 5,所以這是第二長的單詞,然後'世界'(儘管也是5字長,'World'是'Hello'之後的數組)。當單詞具有相同的長度時,請按照它們在數組中存在的順序進行處理。數組永遠不會是空的,並且n> 0總是。

Test.assertEquals(longest(['Hello','World','Codewars','Katas'],3),'World'); 
Test.assertEquals(longest(['Hello','World','Codewars','Katas'],4),'Katas'); 
Test.assertEquals(longest(['aa', 'bb', 'cc', 'dd', 'eee', 'b', 'f', 'ff', 'hhh', 'gggg'],4),'aa'); 
Test.assertEquals(longest(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k'],1),'a'); 
Test.assertEquals(longest(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k','l'],1),'a'); 

我已經通過了所有的測試codewars例例外,最後在「L」結尾的數組。我的分揀代碼行似乎將'f'放在第0個位置,我不明白爲什麼。

function longest(arr, n) { 
    arrLength = []; 
    arr.sort(function(a, b){return b.length - a.length}); 
    console.log(arr); 
    arr.forEach(function(numArray){ 
    return arrLength.push(numArray.length); 
    }); 
    return arr[n-1]; 
} 

console.log(longest(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k'],1)); 
// Sorted Array: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "k"] 
// returns a 
console.log(longest(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l'],1)); 
// Sorted Array: ["f", "a", "c", "d", "e", "b", "g", "h", "i", "k", "l"] 
// returns f 

我似乎無法弄清楚,爲什麼當「L」被添加到字符串數組結束我的排序函數把「F」在零的位置。

+0

您的排序功能是測量長度。爲什麼你會期望任何特定的訂單,當所有的項目是相同的長度? – bhspencer

+0

非常感謝您的幫助。我真的很感謝你對我的問題的貢獻... –

回答

0

您使用內置的排序功能,也許這個函數改變排序的算法,取決於你的數組結束了沒有相同的行爲具有相同的長度字符串。甚至可能這是瀏覽器依賴。

我建議你通過使用具有確定排序功能的庫(快速排序,無論...)來改變這一點。並檢查是否會再次發生。

+0

這應該是一個評論而不是答案。 – bhspencer

+1

@bhspencer這是一個答案:使用除本機排序功能以外的其他內容。 – Walfrat

1

在MSIE上正常工作。

於Microsoft Internet Explorer(所有版本)快速測試給你提供的功能如下結果:

>> longest(['a','b','c','d','e','f','g','h','i','k'],1); 
a,b,c,d,e,f,g,h,i,k 
"a" 
>> console.log(longest(['a','b','c','d','e','f','g','h','i','k','l'],1)); 
a,b,c,d,e,f,g,h,i,k,l 
a 
>> console.log(longest(['a','b','c','d','e','f','g','h','i','k','l',"m","n"],1)); 
a,b,c,d,e,f,g,h,i,k,l,m,n 
a 

PS:所有非MS瀏覽器都有與穩定性排序問題()

+0

是的,即時通訊使用鉻。就像你說的那樣sort()因瀏覽器而異。 –