元素上的气泡排序
Bubble sort on elements
我有一个表,其中包含某些事物的理论速率(id=ratebaseX)和实际观察到的速率(id=rate seenX)。我有一个javascript,它运行在每对中,并简单地计算差异(id=calcX)。
在计算出这个差异之后,我想根据这个计算出的差异对calcIDs数组进行冒泡排序。实际上,我不想更改calcID类中的html或任何东西,只想更改数组中的索引。
对于测试,我将前三个数组元素转储到一个警报框中,因为我知道它们最初是无序的。
function calcLikelihood(){
ratebaseIDs = document.querySelectorAll('[id^="ratebase"]');
rateseenIDs = document.querySelectorAll('[id^="rateseen"]');
calcIDs = document.querySelectorAll('[id^="calc"]');
for(i=0;i<calcIDs.length;i++){
likelihood = Math.round((ratebaseIDs[i].innerHTML - rateseenIDs[i].innerHTML)*100)/100;
calcIDs[i].innerHTML = likelihood;
calcIDs[i].likelihood = likelihood;
}
//bubble sort based on likelihood
for(i=0;i<calcIDs.length;i++){
for(j=0;j<(calcIDs.length-1);j++){
if(calcIDs[j].likelihood<calcIDs[j+1].likelihood){
temp = calcIDs[j];
calcIDs[j] = calcIDs[j+1];
calcIDs[j+1] = temp;
}
}
}
alert("0) " + calcIDs[0].likelihood +"'n1) " + calcIDs[1].likelihood+"'n2) " + calcIDs[2].likelihood);
}
问题是,前三个元素不移动。我确信我的气泡排序是正确的。我认为问题是calcID实际上是一个指针数组?
您的气泡排序正常,我检查过了:
var calcIDs = [{likelihood: 84}, {likelihood: 56}, {likelihood: 68}, {likelihood: 81}];
//bubble sort based on likelihood
for(i=0;i<calcIDs.length;i++){
for(j=0;j<(calcIDs.length-1);j++){
if(calcIDs[j].likelihood<calcIDs[j+1].likelihood){
temp = calcIDs[j];
calcIDs[j] = calcIDs[j+1];
calcIDs[j+1] = temp;
}
}
}
console.log("0) " + calcIDs[0].likelihood +"'n1) " + calcIDs[1].likelihood+"'n2) " + calcIDs[2].likelihood);
// 84, 81, 68
所以,我认为问题是document.querySelectorAll
没有返回数组。它返回一个类型为NodeList
的对象,而在JS中通常只能对真正的数组进行排序。我的意思是,您可以将排序算法应用于集合,但"排序"的项目将以与排序前相同的预定义顺序显示。一个简单的解决方法可能是将节点集合转换为一个实际的数组,如下所示:
var arr = Array.prototype.slice.call(nodes); // nodes = document.querySelectorAll(".your_selector");
然后你就可以应用排序并得到你想要的结果。这对你的目的来说是可以的,因为你声明你不想改变视图。我希望这个迟来的答案能有所帮助:)
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 使用promise和mongoose对文档进行排序
- Selectize.js:如何对整数值的选项进行排序
- Javascript排序的图像弹出窗口..可以't单独弹出
- 如何通过引用var Using DataTables来进行分页或排序
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- AngularJs对所有页面中的所有记录进行排序
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- 按从高到低对多个int变量进行排序
- jQuery UI可排序-多连接列表拖动
- Javascript排序字符串或数字
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- sort而不是排序javascript
- 通过从节点父级获取所有子级对节点进行排序(获取子级数组)
- 如何合并不同集合的游标并按日期排序
- Javascript从关联数组中查找最低数字(气泡排序方法)
- 如何使用气泡排序在 Javascript 中对 2D 数组进行排序
- 元素上的气泡排序
- 为什么会发生这种情况?(气泡排序)[JavaScript]
- 气泡根据图像的名称对其进行排序