私は、クイックソートアルゴリズムを使用して数値の配列をソートするプログラムに取り組んできました。これは私のコードです:
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>
サファリのコンソールは私にこれを表示し続けます:
TypeError: undefined is not an object (evaluating myArray.length)
なぜそれが機能しないのか、私は本当にまったく理解していません。どんな助けでもいただければ幸いです。
で関数を呼び出す場合
quicksort()
引数を渡していない。ただし、関数はで始まる
function quickSort(myArray)
{
if (myArray.length === 0){
return [];
}
引数がquicksort
に渡されないため、myArray
は未定義のままになります。未定義の変数はオブジェクトではないため、length
などのプロパティを持つことはできません。
編集:
ボタンをクリックしたときに関数を呼び出すには、イベントリスナーをHTMLに配置するのではなく、JavaScriptで設定することをお勧めします。
ボタンにID名を付けて、onclick
属性を削除します。
<button id="sortButton">Quick Sort It!</button>
次に、JavaScriptでquickSort
定義の後にイベントリスナーを追加します。
document.getElementById("sortButton").onclick = function(){quickSort(myArray);});
HTMLonclickの関数にパラメータを渡さないでください。したがって、myArrayは最終的にfunc内で未定義になります。関数の外部で定義されたmyArrayは、関数のパラメーターとして定義された内部のmyArrayとは異なることに注意してください。
これがここで役立つかどうかはわかりませんが、document.getElementsByClassNameはスタイルを返しません。
したがって、クラス名を介して要素にアクセスしている間は、質問で述べたのと同じエラーが発生します。
私のプロジェクトの以下のコード。
document.getElementById("profile-main-div").style.display=="none". //Working
document.getElementsByClassName("profile-main-div").style.display=="none". //Not Working