我已經編寫了用於確定字符串數組中第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」在零的位置。
您的排序功能是測量長度。爲什麼你會期望任何特定的訂單,當所有的項目是相同的長度? – bhspencer
非常感謝您的幫助。我真的很感謝你對我的問題的貢獻... –