#javascript #html #parallel-arrays
Вопрос:
У меня возникли проблемы с сортировкой списка книг, который я создаю для задания. Названия книг должны перемещаться вместе с датами и сортироваться от самых старых к самым новым после нажатия кнопки. Однако я не знаю, почему Дон Кихот и Моби Дик не появляются после нажатия кнопки. Есть ли что-то, чего мне не хватает, или я поступил неправильно? Помощь приветствуется.
var names = new Array("To Kill a Mockingbird","Jaws","Don Quixote","Moby-Dick","Northern Lights");
var published = new Array("July 11, 1960", "February 1, 1974","July 11, 1615","October 18, 1851","November 12, 1995");
function display()
{
for(var i = 0; i < names.length; i )
{
var temp = "cell" i "0";
document.getElementById(temp).innerHTML = names[i];
temp = "cell" i "1";
document.getElementById(temp).innerHTML = published[i];
}
}
function SortIt( )
{
var oldest = 0;
var index = 0;
var j = 0;
var k = 0;
var count = 0;
var temp = 0; var temp2 = "";
count = published.length;
count = names.length;
for (k =0; k <= (count -1); k )
{
oldest = Date.parse(published[k]);
index = k;
for (j = (k 1); j <= (count-1); j )
{
if (Date.parse(published[j]) < oldest )
{
oldest = Date.parse(published[j]);
index = j;
}
}
if(k != index)
{
temp = published[k];
published[k] = published[index];
published[index] = temp;
temp2 = names[k];
names[k] = index[k];
names[index] = temp2;
}
}
display();
}
<!DOCTYPE html>
<html lang="en">
<head>
<title>Program 9 - Selection Sort</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="Carbajal_Lab9.js"></script>
</head>
<body onload="display()">
<h1>Program 9 - Selection Sort</h1>
<table id ="workTable" border ="2">
<tr>
<td> <span id = "cell00"/> </td>
<td> <span id = "cell01"/> </td>
</tr>
<tr>
<td> <span id = "cell10"/> </td>
<td> <span id = "cell11"/> </td>
</tr>
<tr>
<td> <span id = "cell20"/> </td>
<td> <span id = "cell21"/> </td>
</tr>
<tr>
<td> <span id = "cell30"/> </td>
<td> <span id = "cell31"/> </td>
</tr>
<tr>
<td> <span id = "cell40"/> </td>
<td> <span id = "cell41"/> </td>
</tr>
</table>
<form>
<input type="button" value="Sort" onclick="SortIt()"/>
</form>
</body>
</html>
Комментарии:
1.
names[k] = index[k];
должно ли это бытьnames[k] = names[index];
так ?2. спасибо вам за исправление!
3. Это сработало, еще раз спасибо. Я не знаю, как я пропустил такую простую ошибку.
Ответ №1:
В
temp = published[k];
published[k] = published[index];
published[index] = temp;
temp2 = names[k];
names[k] = index[k];
names[index] = temp2;
вы устанавливаете names[k]
как index[k]
, хотя index
это int/счетчик.
Что работает для меня , так это создание клонов published
и names
, чтобы, когда вы пытаетесь ввести значение из старого списка, вы могли ссылаться, например, oldnames
.
Переменная count
также задается как 2 разных значения подряд,. Я заменил этот раздел вызовом Math.min
, который выбирает наименьшую из 2 длин массива (предотвращение недопустимых запросов индекса).
Наконец, я спас вас от написания html-кода, создав цикл в javascript, который создает исходную таблицу
var names = new Array("To Kill a Mockingbird","Jaws","Don Quixote","Moby-Dick","Northern Lights");
var published = new Array("July 11, 1960", "February 1, 1974","July 11, 1615","October 18, 1851","November 12, 1995");
var count = Math.min(names.length,published.length);
function drawTable(){
for(var i = 0; i < count; i )
{
document.getElementById('workTable').innerHTML ="<tr>"
"<td> <span id="cell" i "0"" "/></td>"
"<td> <span id="cell" i "1"" "/></td>"
"</tr>"
}
}
function display()
{
for(var i = 0; i < count; i )
{
var temp = "cell" i "0";
document.getElementById(temp).innerHTML = names[i];
temp = "cell" i "1";
document.getElementById(temp).innerHTML = published[i];
}
}
function SortIt( )
{
var oldPublished=published.slice();
var oldNames = names.slice();
var oldest = 0;
var index = 0;
var j = 0;
var k = 0;
var temp = 0; var temp2 = "";
for (k =0; k <= (count -1); k )
{
oldest = Date.parse(published[k]);
index = k;
for (j = (k 1); j <= (count-1); j )
{
if (Date.parse(published[j]) < oldest )
{
oldest = Date.parse(published[j]);
index = j;
}
}
if(k != index)
{
temp = published[k];
published[k] = oldPublished[index];
published[index] = oldPublished[k];
temp2 = names[k];
names[k] = oldNames[index];
names[index] = oldNames[k];
}
}
display();
}
drawTable();
<!DOCTYPE html>
<html lang="en">
<head>
<title>Program 9 - Selection Sort</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="Carbajal_Lab9.js"></script>
</head>
<body onload="display()">
<h1>Program 9 - Selection Sort</h1>
<table id ="workTable" border ="2">
</table>
<form>
<input type="button" value="Sort" onclick="SortIt()"/>
</form>
</body>
</html>