我正在開發一個接受用戶輸入的功能。當用戶提交時,它會按字母升序排列,數字在右邊降序排列。例如,如果用戶輸入是:
a98 @#$64b,ce>75d l3kj gh并且輸出應該是: abcdeghjkl9876543
所以這是我到目前為止所做的:
let sortNumButton = document.getElementById('sortNumButton');
let sortOutputContainer = document.getElementById('sortOutputContainer');
let inputField = document.getElementById('inputField');
sortNumButton.addEventListener('click', function(){
let string = document.createElement('p')
string.innerText = inputField.value
.split('')
.sort((a,b) => isFinite(a) - isFinite(b) || a > b || -(a > b))
.join('')
.replace(/[^a-zA-Z-0-9]/g, "")
sortOutputContainer.appendChild(string)
inputField.value = ""
})
uj5u.com熱心網友回復:
這樣做的一種方法是為比較創建一個評分系統。
例如,如果我們是一個角色,我們可以使用 charCodeAt 來獲取它的 charcode,將其作為正值回傳。
如果我們是一個數字,我們可以將它作為一個數字回傳,比如 1000,然后減去它的值。ps 只是這樣做1000-somechar,也會轉換為數字,因此不需要 parseInt 等。
例如..
const txt = 'a98 @#$64b,ce>75d l3kj gh';
const isNumeric = /[0-9]/;
const isAlpha = /[a-z]/;
const isAlphaNumeric = /[a-z0-9]/;
function score(v) {
if (isAlpha.test(v)) return v.charCodeAt(0);
else return 1000-v;
}
console.log(
txt.split('')
.filter(t => isAlphaNumeric.test(t))
.sort((a,b) => score(a) - score(b))
.join('')
)
另一種選擇,如果我們的字符有限,我們可以創建一個簡單的查找表,然后對其進行排序..
例如..
const txt = 'a98 @#$64b,ce>75d l3kj gh';
const isAlphaNumeric = /[a-z0-9]/;
const lookup = 'abcdefghijklmnopqrstuvwxyz9876543210';
function score(v) {
return lookup.indexOf(v);
}
console.log(
txt.split('')
.filter(t => isAlphaNumeric.test(t))
.sort((a,b) => score(a) - score(b))
.join('')
)
uj5u.com熱心網友回復:
您可以使用正則運算式分別提取數字和字母,然后您可以執行排序。
作業演示:
// Input string
const str = 'a98 @#$64b,ce>75d l3kj gh';
// letters string with sorting in ascending order.
const lettersString = str.match(/[a-z]/g).sort().join('');
// Numbers string with sorting in descending order.
const numbersString = str.match(/[0-9]/g).sort().reverse().join('');
// Result
console.log(`${lettersString}${numbersString}`);
uj5u.com熱心網友回復:
您可以使用正則運算式提取帶有 . 的數字和字母match。這將回傳一個陣列,然后您可以將其join轉換為字串以進行輸出。
此示例功能性更強,可能需要,但它顯示了不同的方法。
const str = 'a98 @#$64b,ce>75d l3kj gh';
// `comparator` gets called with a `type`
// argument and returns a function that gets used
// as the actual sort comparator.
// We use `localCompare` to return a sorted array
// based on the type.
function comparator(type) {
return function (a, b) {
return (
type === 'str'
? a.localeCompare(b) > b.localeCompare(a)
: a.localeCompare(b) < b.localeCompare(a)
);
}
}
// `sort` accepts a type argument and
// returns a string based on calling
// the sort method on the array which calls the
// comparator function with the type, and once that
// process is complete returns a string
function sort(data, type) {
return data.sort(comparator(type)).join('');
}
// `match` returns an array, so we pass that to
// the sort function with a type parameter
const letters = sort(str.match(/[a-z]/g), 'str');
const numbers = sort(str.match(/[0-9]/g), 'num');
console.log(`${letters}${numbers}`);
附加資訊
模板字串
localeCompare條件(三元)運算子
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/440211.html
標籤:javascript 细绳 排序
