2016-07-07 68 views
0

我正在嘗試爲線性搜索編寫咖啡腳本,但我被卡在必須返回除最後一行的值之外的值的位置。 這裏是我的代碼片段:使用咖啡腳本的線性搜索

Linear_Search = (array, desired) -> 
    for x in array 
     do -> 
      if x is desired 
       return true 
    false 

array = [2, 4, 6, 7, 3, 1, 5] 

if Linear_Search(array, 4) 
    console.log("Found") 
else 
    console.log("Not Found") 

if Linear_Search(array, 9) 
    console.log("Found") 
else 
    console.log("Not Found") 

運行此腳本我回答是 後「未找到」 「未找到」

我曾嘗試過各種東西,如消除回報關鍵字。但他們似乎沒有工作。幫助我學習這個令人敬畏的技術。

Compile Online

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf –

+0

謝謝你,但我實際上是尋求幫助在咖啡標記。 – jainaman224

+0

javascript *是* coffeescript。這種方法在兩者中都是相同的。 –

回答

1

你的功能是有缺陷的

Linear_Search = (array, desired) -> 
    for x in array 
     do -> 
      if x is desired 
       return true 
    false 

應該是:

Linear_Search = (array, desired) -> 
    for x in array 
     found = do (x) -> 
      x is desired 

     return true if found 

    false 

do創建一個內部函數(閉包),它的響應不被你的功能考慮。我不確定它在這種情況下是否增強了功能(可能有一個原因,我錯了 - 如果是這樣的話,有更多知識的人有希望權衡)。

我會寫

Linear_Search = (array, desired) -> 
    for x in array 
     return true if x is desired 

    false 
+0

謝謝。它爲我解決。 – jainaman224

+0

[「當使用JavaScript循環生成函數時,通常插入一個閉包封裝以確保循環變量被關閉,所有生成的函數不僅僅共享最終值,CoffeeScript提供'do'關鍵字,它立即調用傳遞的函數,轉發任何參數。「](http://coffeescript.org/#loops)不需要'do','do'的規範情況是爲了避免在構建循環內的函數。 –

+0

感謝您的信息! –