JavaScript排序函数没有正确排序



我对javascript和编码非常陌生,所以请原谅我。我有一个大约1000个条目的javascript对象数组。每一行都保存着撞击过地球的流星的信息。

<table class="table table-striped">
<tr  class="bg-info">
<th data-colname="date" data-order="desc"> Date/Time (UT) &#9650</th>
<th data-colname="latitude">Latitude (deg) &#9650</th>
<th data-colname="longitude" data-order="desc">Longitude (deg) &#9650</th>
<th data-colname="altitude" data-order="desc">Altitude (km) &#9650</th>
<th data-colname="velocity" data-order="desc">Velocity (km/s) &#9650</th>
<th data-colname="vx" data-order="desc">vx &#9650</th>
<th data-colname="vy" data-order="desc">vy &#9650</th>
<th data-colname="vz" data-order="desc">vz &#9650</th>
<th data-colname="radiatedEnergy" data-order="desc">Total Radiated Energy (J) &#9650</th>
<th data-colname="impactEnergy" data-order="desc">Calculated Total Impact Energy (kt) &#9650</th>
</tr>

<tbody id="myTable"> </tbody>
</table>

var myArray = [
{'date': '2022-09-14 23:31:15' ,'latitude': '40.8N' ,'longitude': '63.4E'  ,'altitude': '35.8' ,'velocity': '17.4' ,'vx': '-13.9' ,'vy': '-4.3'  ,'vz': '9.5'   ,'radiatedEnergy': '15.2e10'   ,'impactEnergy': '0.11'},
{'date': '2013-02-15 03:20:33' ,'latitude': '54.8N' ,'longitude': '61.1E'  ,'altitude': '23.3' ,'velocity': '18.6' ,'vx': '+12.8' ,'vy': '-13.3' ,'vz': '-2.4'  ,'radiatedEnergy': '3.75e14'  ,'impactEnergy': '440'},
{'date': '2018-12-18 23:48:20' ,'latitude': '56.9N' ,'longitude': '172.4E' ,'altitude': '26.0' ,'velocity': '13.6' ,'vx': '6.3'   ,'vy': '-3.0'  ,'vz': '-31.2' ,'radiatedEnergy': '3.13e13'  ,'impactEnergy': '49'},
]
buildTable(myArray)   

数组随后被排序并构建到html网页中。

$('th').on('click', function(){         
var column = $(this).data('colname')
var order = $(this).data('order')
var text = $(this).html()
text = text.substring(0, text.length - 1);

if(order == 'desc') {
$(this).data('order', "asc")
myArray = myArray.sort((a,b) => a[column] > b[column] ? 1 : -1)
text += '&#9660'     //appends triangle symbol based on ascending or descending            
}else {
$(this).data('order', "desc")
myArray = myArray.sort((a,b) => a[column] < b[column] ? 1 : -1)
text += '&#9650'
}
$(this).html(text)
buildTable(myArray)
})

function buildTable(data){
var table = document.getElementById('myTable')
table.innerHTML = ''   
for (var i = 0; i < data.length; i++){
var colname = `num-${i}`
var row = `<tr>
<td>${data[i].date}</td>
<td>${data[i].latitude}</td>
<td>${data[i].longitude}</td>
<td>${data[i].altitude}</td>
<td>${data[i].velocity}</td>
<td>${data[i].vx}</td>
<td>${data[i].vy}</td>
<td>${data[i].vz}</td>
<td>${data[i].radiatedEnergy}</td>
<td>${data[i].impactEnergy}</td>
</tr>`
table.innerHTML += row
}
}

问题是我需要这个排序算法为2个最重要的列工作,它目前不是,被辐射能量和影响能量。我如何修改这个排序算法来排序radiatedEnergy值,使3.75e14>15.2 e10汽油?

我也不明白为什么impactEnergy排序似乎只检查第一个数字,而不是整个值。

impactEnergy列图像

我尝试了不同的排序算法来包含适合此数据的参数,但它们都不起作用。对于radiatedEnergy,我需要算法来区分e10, e11, e12等。对于impactEnergy,我不知道为什么不检查整个值。如有任何帮助,不胜感激。

由于数字被括在单引号中,因此它被视为文本,并且使用字符串比较而不是数字比较。

  1. 删除数组声明中数字的单引号
  2. 使用number. toexponential()方法以指数形式显示数字。

最新更新