【发布时间】:2017-07-10 18:13:18
【问题描述】:
我正在用javascript从头开始编写我自己的递归合并排序函数,但是每当我用任何数字数组测试它时,我都会收到以下错误:“TypeError: Cannot read property 'length' of undefined”
我不知道为什么会收到此错误,因为我使用“length”属性的唯一位置是我争论的数组(在 mergeSort 函数内)和该数组的子数组(在合并函数内)。当给定两个任意长度的排序数组时,我的合并函数在单独测试时已经完美运行。
这是我的全部代码:
function merge(arrayOne, arrayTwo){
let sorted = []
while(arrayOne.length > 0 && arrayTwo.length > 0){
if(arrayOne[0] < arrayTwo[0]){
sorted.push(arrayOne.shift());
} else{
sorted.push(arrayTwo.shift());
}
}
return sorted.concat(arrayOne).concat(arrayTwo);
}
function mergeSort(array){
let arrayLength = array.length;
let midpoint = arrayLength/2;
let firstHalf = array.slice(0, midpoint);
let secondHalf = array.slice(midpoint, arrayLength);
if(arrayLength < 2){
return array;
} else{
merge(mergeSort(firstHalf), mergeSort(secondHalf));
}
}
【问题讨论】:
-
使用给定的代码,你唯一使用长度的地方是
while(arrayOne.length > 0 && arrayTwo.length > 0){你的错误,无法读取未定义的长度,所以arrayOne和/或arrayTwo是未定义的
标签: javascript sorting recursion merge mergesort