2014-09-29 225 views
0

我將C++代碼轉換爲javascript,即here。代碼的其餘部分看起來不錯,但以下功能有問題。首先,while循環內部的第二行拋出錯誤Uncaught ReferenceError: Invalid left-hand side in assignment。當我將其更改爲m = (A[m] >= key ? r : l);時,此循環變得無限。 如何在JavaScript中解決它?使用javascript進行二進制搜索

function CeilIndex(A, l, r, key) { 
     var m; 

     while(r - l > 1) { 
      m = l + (r - l)/2; 
      (A[m] >= key ? r : l) = m; // ternary expression returns an l-value 
     } 

     return r; 
    } 

回答

1
if (A[m] >= key) { 
    r = m; 
} else { 
    l = m; 
} 

JavaScript不能有除了性能(即你可以做obj[A[m] >= key ? 'r' : 'l'] = m,但你提出不算什麼)可變左值。

1

你只需要適當地打破你的左側。我不知道你想要做什麼,但假設你分配m要麼rl

if (A[m] >= key) { 
    r = m; 
} else { 
    l = m; 
} 
1

在JavaScript中,你可以這樣做,而不是:

A[m] >= key ? r = m : l = m;