2017-04-19 52 views
1

我有以下簡單的JavaScript代碼(合併排序),出於某種原因,將值推入數組不會在merge()函數(jsfiddle中的第26和31行)。這是關於數組範圍的東西嗎?但它在合併函數中明確定義。我錯過了一些非常概念化的東西。任何幫助將不勝感激。array.push()即使數組對象被明確定義並且在作用域中也不起作用

https://jsfiddle.net/kalyanc/pu8988qc/

var A = [5,2,4,7,1,3,2,6];  

mergeSort(A); 

function mergeSort(array) { 
    if (array.length < 2) { 
    return array; 
    } 
    var midpoint = parseInt(array.length/2); 
    var left = array.slice(0, midpoint); 
    var right = array.slice(midpoint, array.length); 
    alert("Calling merge with arrays, " + left + " and " + right); 
    return merge(mergeSort(left), mergeSort(right)); 
} 

function merge(L, R) { 
    var Output = []; // Output array is clearly defined here. 

    var m = 0; 
    var n = 0; 

    while(m < L.length && n < R.length) 
    { 
    for (var x = 0; x < Math.min(L.length, R.length); x++) { 
     if (L[m] <= R[n]) { 
     Output.push(L[m]); // Does not work! 
     m++;   
     alert("Output from merge is array " + toString(Output)); 
     // Alerts: Output from merge is array [object Undefined] 
     } else { 
     Output.push(R[n]); // Does not work! 
     n++; 
     alert("Output from merge is array " + toString(Output)); 
     // Alerts: Output from merge is array [object Undefined] 
     }    
    } 
    }   

    // Check if either L or R have an element left 
    if (m < L.length) { 
    for (var o = m; o < L.length; o++) {      
     Output.push(L[o]); 
    }    
    } 
    if (n < R.length) { 
    for (var o = n; o < R.length; o++) { 
     Output.push(R[o]); 
    }    
    } 
    return Output;      
} 

回答

2

toString是一個對象原型函數,並應在對象上被調用。

在您的特定實例中,不要致電toString(Output)嘗試使用Output.toString()

jsfiddle

相關問題