2014-09-29 150 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;