我的程序不断收到此错误:VM178 SortLib.js:71 Uncaught TypeError: 无法读取未定义的属性“length”
2020-02-17
93
我正在尝试使用 HTML 和 Javascript 直观地实现合并排序算法。合并排序实现的输出按计划工作,但我的终端窗口不断出现错误。
//Merge Sort Algorithm Implementation
//Function for dividing array into two sub problems
divide = (array) => {
if (array.length < 2) {
return array
}
const mid = Math.floor(array.length / 2)
const smallOne = array.slice(0, mid)
const smallTwo = array.slice(mid)
return sort(divide(smallOne), divide(smallTwo))
}
//Function for sorting array
sort = (smallOne, smallTwo) => {
const sorted = []
while (smallOne.length && smallTwo.length) {
if (smallOne[0] <= smallTwo[0]) {
sorted.push(smallOne.shift())
} else {
sorted.push(smallTwo.shift())
}
}
const output = [...sorted, ...smallOne, ...smallTwo]
console.log(output)
return output
}
//Functiom for merge sort
mergeSort = (array) => {
return sort(divide(array))
}
这是控制台中错误的图片
3个回答
您收到错误是因为
smallTwo
在
sort
函数中是
undefined
。
完整的错误消息是:
while (smallOne.length && smallTwo.length) {
^
TypeError: Cannot read property 'length' of undefined
Oron Bendavid
2020-02-17
缺少第二个参数
mergeSort = (array) => {
return sort(divide(array), ????)
}
Serghei Tibulschii
2020-02-17
我认为您可以从 mergeSort 中调用 divide ,因为 sort 需要两个变量,并且 mergeSort 中的 sort 调用最终使用单个参数调用已排序的输出..
mergeSort = (array) => {
return divide(array);
}
vishnu sandhireddy
2020-02-17