經過一些嘗試,只有其中一個功能在 CodeWars 中給了我正確的結果。任何人都可以向我解釋原因嗎?
{
//1. solution => wrong
var middle = Math.round(s.length / 2);
s.length % 2 == 0 ? console.log(s[middle-1] s[middle]) : console.log(s[middle-1]);
//2. solution => correct
return (s.length%2 == 0 ? s.substr((s.length/2-1),2) : s.substr((s.length/2),1));
}
解決方案1的結果是:

uj5u.com熱心網友回復:
第一個解決方案不正確地處理奇數長度的字串;它回傳中間之前s[middle-1]的字符而不是中間的字符s[middle] 。
第二個解決方案通過在 position 處獲取字符來解決這個問題,該位置(s.length/2)對應于第一個解決方案中 middle 的值。
更新來自@evolutionxbox 的其他問題:
正如@evolutionxbox 指出的那樣,如果您的原始解決方案是使用console.log 而不是return 來輸出結果,那也是一個問題。我假設您添加了它以并排查看結果。
uj5u.com熱心網友回復:
失敗的測驗訊息告訴您回傳的值(測驗代碼收到的值)總是undefined,因為它們宣告expected undefined to equal 'es'。
您的第一個解決方案的問題在于它將結果列印到控制臺(通過呼叫console.log),而不是通過return陳述句回傳結果。
如果您擺脫console.log呼叫并添加return陳述句,那么第一個解決方案與第二個解決方案幾乎相同,并且它將通過大多數測驗。
但是仍然存在細微差別,NaN如果輸入是空字串,則第一個解決方案回傳,而第二個解決方案回傳一個空字串。因此,根據測驗套件的不同,第一個解決方案可能仍無法通過所有測驗。
運行下面的代碼來比較結果。
solution1 = (s) => {
var middle = Math.round(s.length / 2);
return s.length % 2 == 0 ? s[middle-1] s[middle] : s[middle-1];
};
solution2 = (s) => {
return (s.length%2 == 0 ? s.substr((s.length/2-1),2) : s.substr((s.length/2),1));
};
["", "x", "oz", "eye", "test", "--z--", "---uv---"].forEach(it =>
console.log("solution1: '%s' solution2: '%s' for input '%s'", solution1(it), solution2(it), it)
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/422807.html
標籤:
