簡體   English   中英

按數字和字母對 javascript 數組進行排序

[英]Sort javascript array by numbers and letters

我想對這個 javascript 數組進行排序:

 [103,3,4,6,8,"8L",67,1,11,19,68,86,107,"9L"];

按數字和字母排序,結果將如下所示:

 [1,3,4,6,8,"8L","9L",11,19,67,68,86,103,107];

當我嘗試使用sort()時,它不起作用:

 [1,3,4,6,8,68,103,"8L",11,19,67,86,107,"9L"]; // 8L and 9L are in the wrong place

 // correct wanted order var correct = [1,3,4,6,8,"8L","9L",11,19,67,68,86,103,107]; document.body.innerHTML += '<b>correct wanted order:</b> <pre>' + JSON.stringify(correct) + '</pre>'; // array to order var unordered = [103,3,4,6,8,"8L",67,1,11,19,68,86,107,"9L"]; document.body.innerHTML += '<b>array to order:</b> <pre>' + JSON.stringify(unordered) + '</pre>'; unordered = unordered.map(item => { return item; }); var ordered = unordered.sort(function(a, b) { return a - b; }); document.body.innerHTML += '<b>order attempt:</b> <pre>' + JSON.stringify(ordered) + '</pre>';

您可以使用數組.sort()localeCompare()方法通過傳遞{numeric: true}選項輕松地做到這一點,例如:

 var unordered = [103,3,4,6,8,"8L",67,1,11,19,68,86,107,"9L"]; var correct = unordered.sort((a,b) => a.toString().localeCompare(b.toString(), undefined, {numeric: true})) console.log( correct )
 .as-console-wrapper { max-height: 100%;important: top; 0; }

看起來您希望首先將排序 function 中的所有內容都視為字符串。 然后從字符串的rest中拆分出數字,分別測試。 像這樣的東西:

const ordered = unordered.sort(function(a, b) {
  // Break apart the assumed strings (Numbers then everything else)
  const [, aNumber, aString] = `${a}`.match(/(\d*)(.*)/);
  const [, bNumber, bString] = `${b}`.match(/(\d*)(.*)/);

  // Test numbers
  if(Number(aNumber) < Number(bNumber)) return -1;
  if(Number(aNumber) > Number(bNumber)) return 1;

  // Test letters if there is a tie
  return aString < bString ? -1 : 1;
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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