2015-07-11 84 views
0

我寫的歸併排序算法,並在合併輔助函數,我有以下比較語句:JavaScript的合併/排序致命錯誤

function merge(a,b){ 
     var result = []; 
      while(a.length && b.length){ 
        result.push(a[0] < b[0] ? a.shift() : b.shift()); // you can't just grab a[0] or b[0] 
     //as it results in a fatal error. 
       } 
return, etc. 
} 

爲什麼當,而不是「a.shift( )',我輸入了一個[0],它導致了一個致命的錯誤?是否因爲你正在做一些也在條件式子句中的事情?

+0

猜測'a [0]'不會從'a'中刪除條目,所以最終會導致無限循環,導致'result'比想要的大。 – user3386109

回答

1

簽出shift的文檔。它刪除了第一個元素。所以如果你只訪問[0]並且不刪除它,那麼while循環永遠不會退出。