[英]Bubble sort on elements
我有一張表,其中包含某些事物的理論速率(id = ratebaseX)和某些事物的實際觀察速率(id = rateseenX)。 我有一個遍歷每對的javascript,可以簡單地計算出差異(id = calcX)。
計算完此差異后,我想根據此計算出的差異對calcIDs數組進行冒泡排序。 我實際上並不想更改calcIDs類中的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);
}
問題在於前三個元素不會移動。 我很確定我對氣泡的排序是正確的。 我認為問題是calcIDs實際上是一個指針數組?
您的氣泡排序沒問題,我檢查了一下:
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");
然后您將能夠應用排序並獲得期望的結果。 可以滿足您的目的,因為您聲明不想更改視圖。 我希望這個較晚的答案有幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.