开发者问题收集

我的程序不断收到此错误: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))
}

这是控制台中错误的图片

Console Error

3个回答

您收到错误是因为 smallTwosort 函数中是 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