#javascript #bar-chart
#javascript #гистограмма
Вопрос:
Я пытаюсь создать сортировщик гистограмм. При нажатии кнопки он отсортирует гистограмму. Но когда я запускаю функцию сортировки, она выдает мне эту ошибку. Я попытался выполнить поиск в моем файле на наличие опечаток, так как это было рекомендовано в других ответах.
Заранее спасибо.
Вот мой JS:
document.getElementById('sort').onclick = () => {
setTimeout(function(){
for (let i = 0; i < 8; i ) {
let g = document.getElementsByClassName('bar');
g[i].style.height = sort()[i]
console.log(sort()[i])
}},100)
}
function sort() {
let array = [];
for (let i = 0; i < 8; i ) {
let g = document.getElementsByClassName('bar');
array.push(parseInt(g[i].innerText));
if (i >= 8) {
return sortItems(array)
}
}
}
function sortItems(array) {
var length = array.length;
for(var i = 1, j; i < length; i ) {
var temp1 = array[i];
for(var j = i - 1; j >= 0 amp;amp; array[j] > temp1; j--) {
array[j 1] = array[j];
}
array[j 1] = temp1;
}
return array;
}
И вот мой html:
<button id="regenerate">Regenerate</button>
<button id="sort">Sort</button>
<div class="bars">
<div class="bar" id="bar1"><p class="barlabel"></p></div>
<div class="bar" id="bar2"><p class="barlabel"></p></div>
<div class="bar" id="bar3"><p class="barlabel"></p></div>
<div class="bar" id="bar4"><p class="barlabel"></p></div>
<div class="bar" id="bar5"><p class="barlabel"></p></div>
<div class="bar" id="bar6"><p class="barlabel"></p></div>
<div class="bar" id="bar7"><p class="barlabel"></p></div>
<div class="bar" id="bar8"><p class="barlabel"></p></div>
</div>
<script src="index.js"></script>
Комментарии:
1. Ошибка включает в себя, какой строкой она была вызвана. Посмотрите внимательнее на эту строку, это поможет вам найти проблему. В общем, вы должны привыкнуть читать ошибки, чтобы помочь отладке, а не просматривать их.
2. Я проверил. Я не вижу ничего плохого.
g[i].style.height = sort()[i]
3. Проверьте ошибку еще раз и сравните ее с вашим кодом. i равно нулю, и он пытается прочитать нулевой элемент массива, который не определен. Это не опечатка, это ошибка, которая возникает при выполнении кода.
Ответ №1:
Давайте посмотрим на этот цикл for в функции sort():
for (let i = 0; i < 8; i ) {
let g = document.getElementsByClassName('bar');
array.push(parseInt(g[i].innerText));
if (i >= 8) {
return sortItems(array)
}
}
Он возвращает только массив, если i >= 8
, но сам цикл будет повторяться только до тех пор, пока i < 8
. Это означает, что функция sort() никогда ничего не вернет.
В этой строке g[i].style.height = sort()[i]
вы ожидаете, что в качестве возвращаемого значения будет массив sort()
, но на самом деле это undefined
так. Просто докажите это с console.log(typeof sort())
помощью .