未定义不是对象(评估myArray.length)

Jos*_*ddy 4 html javascript safari quicksort

我一直在研究一个使用快速排序算法对数字数组进行排序的程序.这是我的代码:

    var myArray=[8,2,5,6];

function quickSort(myArray)
{
    if (myArray.length === 0){
        return [];
    }

    var left=[];
    var right=[];
    var pivot= myArray[0];

    for (var i=1; i<myArray.length; i++){

        if (myArray[i]<pivot) {
            left.push(myArray[i]);

        }

        else {

            right.push(myArray[i]);
        }
    }

    return quickSort(left).concat(pivot, quickSort(right));
    document.getElementById().innerHTML = quickSort(left).concat(pivot, quickSort(right));
}
Run Code Online (Sandbox Code Playgroud)

这是我的HTML

<html>
<h1>QuickSorter</h1>
<button onclick="quicksort()">Quick Sort It!</button>
<script src="quicksort.js"> </script>
</html>
Run Code Online (Sandbox Code Playgroud)

safari中的控制台一直向我显示:

TypeError: undefined is not an object (evaluating myArray.length)
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么它不起作用.任何帮助,将不胜感激.

War*_* R. 6

如果你正在调用该函数

quicksort()
Run Code Online (Sandbox Code Playgroud)

你没有传递任何参数.但是,你的函数开始于

function quickSort(myArray)
{
  if (myArray.length === 0){
    return [];
  }
Run Code Online (Sandbox Code Playgroud)

由于没有传递参数quicksort,myArray因此未定义.未定义的变量不是对象,因此不能具有诸如的属性length.

编辑:

为了在单击按钮时调用您的函数,最好在javascript中设置事件监听器,而不是将其放在HTML中.

为您提供一个ID名称并删除该onclick属性:

<button id="sortButton">Quick Sort It!</button>
Run Code Online (Sandbox Code Playgroud)

然后在quickSort定义后在JavaScript中添加事件侦听器:

document.getElementById("sortButton").onclick = function(){quickSort(myArray);});
Run Code Online (Sandbox Code Playgroud)