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)
我真的不明白为什么它不起作用.任何帮助,将不胜感激.
如果你正在调用该函数
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)