javascript - 如何对日期使用选择排序?
问题描述
我正在尝试使用带有并行数组的选择排序进行编码,根据发布日期以升序(从最旧到最新)重新排列内容。确保与值关联的名称与另一个名称保持平行。日期应按月、日、年的顺序显示。我在看我的教科书,他们只显示了一个输入考试成绩的例子,我如何比较这个数组中的日期?
function main() {
var myArr = new Array(["To Kill a Mockingbird", "July 11, 1960"], ["Jaws", "February 1, 1974"], ["Don Quixote", "July 11, 1615"], ["Moby-Dick", "October 18, 1851"], ["Northern Lights", "November 12, 1995"]);
original(myArr);
selectionSort(myArr);
}
function original(myarray) {
for (var i = 0; i < 2; i++) {
myarray[i];
for (var j = 0; j < 2; j++) {
myarray[i][j];
}
}
var table = document.getElementById("myTable");
for (var i = 0, row; row = table.rows[i]; i++) {
for (var j = 0, col; col = row.cells[j]; j++) {
col.innerText = myarray[i][j];
}
}
return myarray;
}
function selectionSort(arr) {
var minIdx, temp,
len = arr.length;
for (var i = 0; i < len; i++) {
minIdx = i;
for (var j = i + 1; j < len; j++) {
if (arr[j] < arr[minIdx]) {
minIdx = j;
}
}
temp = arr[i];
arr[i] = arr[minIdx];
arr[minIdx] = temp;
}
var table2 = document.getElementById("myTable2");
for (var i = 0, row; row = table2.rows[i]; i++) {
for (var j = 0, col; col = row.cells[j]; j++) {
col.innerText = arr[i][j];
}
}
return arr;
}
main();
table {
border: solid black;
}
body {
margin: 10ex;
color: black;
font-weight: bold;
}
td {
font-size: 18px;
color: black;
font-weight: bold;
margin: 10%;
padding: 5px;
line-height: 120%;
width: 75pt;
height: 25pt;
text-align: center;
}
<h2>Original Table</h2>
<table style="width: 50%" id="myTable" border="1">
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</table>
<br/><br/>
<h2>Selection Sort</h2>
<table style="width: 50%" id="myTable2" border="1">
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</table>
解决方案
我认为主要问题是您正在比较数组而不是比较日期:
if (arr[j] < arr[minIdx]) {
minIdx = j;
}
.sort()
您可以使用函数代替嵌套循环对元素进行排序:
function main() {
var myArr = new Array(["To Kill a Mockingbird", "July 11, 1960"], ["Jaws", "February 1, 1974"], ["Don Quixote", "July 11, 1615"], ["Moby-Dick", "October 18, 1851"], ["Northern Lights", "November 12, 1995"]);
original(myArr);
selectionSort(myArr);
}
function original(myarray) {
for (var i = 0; i < 2; i++) {
myarray[i];
for (var j = 0; j < 2; j++) {
myarray[i][j];
}
}
var table = document.getElementById("myTable");
for (var i = 0, row; row = table.rows[i]; i++) {
for (var j = 0, col; col = row.cells[j]; j++) {
col.innerText = myarray[i][j];
}
}
return myarray;
}
function selectionSort(arr) {
// sort array
let newArray = arr.sort(function(a, b) {
const prev = new Date(a[1]);
const next = new Date(b[1]);
if(prev > next)
return 1;
if(prev < next)
return -1;
return 0;
});
var table2 = document.getElementById("myTable2");
//console.log(table2.rows);
for (var i = 0; i < table2.rows.length; i++) {
// add title
table2.rows[i].cells[0].innerText = newArray[i][0];
// add date
table2.rows[i].cells[1].innerText = newArray[i][1];
}
return newArray;
}
main();
table {
border: solid black;
}
body {
margin: 10ex;
color: black;
font-weight: bold;
}
td {
font-size: 18px;
color: black;
font-weight: bold;
margin: 10%;
padding: 5px;
line-height: 120%;
width: 75pt;
height: 25pt;
text-align: center;
}
<h2>Original Table</h2>
<table style="width: 50%" id="myTable" border="1">
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</table>
<br /><br />
<h2>Selection Sort</h2>
<table style="width: 50%" id="myTable2" border="1">
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</table>
推荐阅读
- python - 替换为正则表达式重复
- sql - 直接使用row_number函数
- wordpress - Chrome 等待可用套接字,Firefox 很好
- udp - UDP广播丢失的数据包比接收的多?
- ruby - PUMA ArgumentError: 找不到登录名 -- 扩展 `~'
- r - 基于另一列的值的列的条形图
- python - discord\client.py 错误中的 python 脚本上的追溯错误?
- vue.js - 数据在 $.each() 中变得未定义
- java - 2 个 TabItem 的用户列表
- azure - Azure 应用程序网关 - 将流量重定向到外部站点而不更改 URL