簡體   English   中英

javascript字符串的自定義排序比較器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM