javascript - 未定义不是一个对象(评估 myArray.length)

标签 javascript html 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));
}

这是我的html

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

safari 中的控制台不断向我显示:

TypeError: undefined is not an object (evaluating myArray.length)

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

最佳答案

如果你正在调用函数

quicksort()

您没有传递任何参数。但是,您的函数以

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

由于没有参数传递给 quicksortmyArray 未定义。 undefined variable 不是对象,因此不能具有 length 等属性。

编辑:

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

给你按钮一个 ID 名称并删除 onclick 属性:

<button id="sortButton">Quick Sort It!</button>

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

document.getElementById("sortButton").onclick = function(){quickSort(myArray);});

关于javascript - 未定义不是一个对象(评估 myArray.length),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26898738/

相关文章:

macos - 帮助改进我针对 Safari 高内存使用率的个人解决方案,或说明为什么它不好

javascript如何从数组中删除每第三个元素

html - 在 CSS 中为 Sharepoint 2010 内容编辑器添加第三层下拉菜单

php - 如何正确编辑用户个人资料并存储其照片?

javascript - 无法通过 JAVASCRIPT 更改新行的 html 元素的名称

ios - 如何删除ios模拟器safari缓存

javascript - 使用 npm 安装 grunt-browser-sync 时出错

javascript - 如何配置数据表,以便它根据创建的日期对记录进行排序(描述)?

javascript - jQuery 可排序添加额外信息

javascript - 无法使用javascript获取Safari浏览器的cookie和网站数据模式?