2017-10-04 109 views
0

我在解決一個JavaScript問題時被卡住了。我不明白的是如何打印出數組中數量最多的字符串。如何獲得數組中數值最大的字符串?

你能幫我指出我的代碼在哪裏出問題嗎?

問題的描述:

決定一週中的一天有數量最多的人訪問的 寵物商店。如果一週中超過一天的流量達到相同的最高流量,則應返回包含天數(以任意順序)的數組。 (例如[「星期三」,「星期四」])。如果輸入爲空或空數組,函數 應該返回null。 @param week Weekday對象的數組 @返回一個字符串,其中包含一週中最受歡迎的一天的名稱(如果只有一個最受歡迎的日子)以及包含最受歡迎日子的名稱的字符串數組是一個更重要的是最受歡迎

Codepen demo

代碼:

function mostPopularDays(week) { 
if (typeof week === "undefined" || week === null || week.length === 0) 
{ 
return null; 
} 
var result; 
var traffic; 

for (i = 0; i < week.length; i++) { 
if (week[i].traffic > traffic) { 
    traffic = week[i].traffic; 
    result = week[i].name; 
} 
} 
return result; 
} 

function Weekday(name, traffic) { 
    this.name = name; 
    this.traffic = traffic; 
} 

感謝,

+0

變種流量;流量將在for循環中未定義 – marvel308

+0

您可以定義'var result'和'var traffic'兩次。當你在'for'循環中賦值給它們時,你不應該再寫'var'。此外,如果您正確縮進,您的代碼將更具可讀性並且更容易找到錯誤。你可以使用像[漂亮](https://prettier.io/playground/)這樣的工具來清理它。 –

+0

感謝您的評論@ marvel308和@ Rory O'Kane。我在循環中刪除了'var',但它不起作用。我創建了一個[codepen demo](https://codepen.io/aaayumi/pen/eGexMw?editors=1010)。我用普瑞蒂爾修改了代碼。 – aaayumi

回答

0

當您聲明var traffic;然後traffic === undefined和結果相同的東西。

在for循環中,你比較week[i].traffic > traffic

它解釋爲week[i].traffic > undefined

30 (or any number) > undefined永遠是假的,所以你永遠不會設置流量或導致到任何東西,這就是爲什麼它返回undefined。

所以week[i].traffic > 0

而且,我看到你發表評論。你應該發送一個數組作爲參數。 (不2參數)

喜歡的是:mostPopularDays([{"Wednesday" : 30 }, {"Thursday" : 20}])

代替mostPopularDays({"Wednesday" : 30 }, {"Thursday" : 20})

+0

謝謝你的評論。我根據你的建議編輯我的答案,[demo](https://codepen.io/aaayumi/pen/eGexMw?editors=1010)。它仍然不起作用。 – aaayumi

相關問題