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;
}