[英]Custom sort comparator for javascript string
我有一個自定義比較器,用於對某些字符串進行排序,該字符串無法按預期的降序排序。
var list = document.getElementById('mylist'); var items = list.childNodes; var itemsArr = []; for (var i in items) { if (items[i].nodeType == 1) { // get rid of the whitespace text nodes itemsArr.push(items[i]); } } var sortOrder = "DESC"; itemsArr.sort(function(a, b) { switch (sortOrder) { case "ASC": var val = a.innerHTML.localeCompare(b.innerHTML); break; case "DESC": var val = a.innerHTML.localeCompare(b.innerHTML); if (val === 1) val = -1; if (val === -1) val = 1; break; } return val }); /*itemsArr.sort(function(a, b) { return a.innerHTML == b.innerHTML ? 0 : (a.innerHTML > b.innerHTML ? 1 : -1); });*/ for (i = 0; i < itemsArr.length; ++i) { list.appendChild(itemsArr[i]); }
<ul id="mylist"> <li id="list-item3">Service</li> <li id="list-item4">Vendor</li> <li id="list-item2">Service_Type</li> <li id="list-item1">Call_Date</li> <li id="list-item3">Customer Sat Rating</li> <li id="list-item4">TTA</li> <li id="list-item2">Support_Rep</li> <li id="list-item1">Source_State</li> <li id="list-item3">Severity</li> <li id="list-item4">Customer_Type</li> <li id="list-item2">CALL ID</li> <li id="list-item1">Resolved_Ontime</li> <li id="list-item2">Product</li> <li id="list-item1">Minutes_On_Phone</li> </ul>
對於我之前排序的其他數據,它對於升序和降序均適用。 對於當前的html數據,沒有。 有人可以告訴我我不正確的地方嗎?
您將其設置為DESC,然后再次返回:
case "DESC":
var val = a.innerHTML.localeCompare(b.innerHTML);
if (val === 1)
val = -1;
if (val === -1)
val = 1;
break;
更改為:
case "DESC":
var val = -1 * a.innerHTML.localeCompare(b.innerHTML);
break;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.