![](/img/trans.png)
[英]Javascript: How to sort array in by numbers then letters then symbols?
[英]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.