我正在javascript中从头开始编写自己的递归合并排序函数,但是任何时候我用任何数字数组测试它都会收到以下错误:“TypeError:无法读取未定义的属性'长度'
我不知道为什么我收到此错误,因为我使用“length”属性的唯一地方是我的争论arrray(在mergeSort函数内)和此数组的子数组(在merge函数内)。当给定两个任意长度的排序数组时,我的合并函数在单独测试时已经完美地工作。
这是我的整个代码:
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));
}
}
答案 0 :(得分:1)
修改看起来您在修改中定义了$('#mySelect').html( $.map(selectValues, function(val, key){
return '<option value="' + val + '">'+ key + '</option>';
}).join(''));
,因此唯一的问题是您必须在arrayLength
以下是该算法的固定版本:
mergeSort
&#13;
注意:还可以进行其他一些优化,但以上是解决错误所需的代码的最小更改。如果您将此作为学习练习,我建议您在完成后查看其他一些实现。