我一直在开发一个使用快速排序算法对数字数组进行排序的程序。这是我的代码:
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 [];
}
由于没有参数传递给 quicksort
,myArray
未定义。 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/