[英]Javascript sort an array of strings that containing numbers
我正在嘗試對有時包含數字的字符串數組進行排序。
以下是可能收到的數組示例和預期結果:
這是我的實際代碼: all_values 是我必須排序的數組。
const customSort = (a, b) => {
return (Number(a.match(/(\d+)/g)[0]) - Number((b.match(/(\d+)/g[0])))
;};
const hasNumber = (myString) => {
return /\d/.test(myString);};
// Sort filters
this.product.product_filter.map(filter => {
if (hasNumber) {
filter.all_values = filter.all_values.sort(customSort);
} else {
filter.all_values = filter.all_values.sort();}
});
在此先感謝您的幫助。
var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
var myArray = ['1_Document', '11_Document', '2_Document'];
console.log(myArray.sort(collator.compare));
我相信您的問題在於您如何使用hasNumber
。 如果您將其用作條件,它將始終是真實的。 function
中的 function 始終是真實的,這意味着您的第一個條件將始終得到滿足,並且永遠不會碰到您的else
塊。
我認為您正在查看是否可以將數組中的任何元素轉換為數字。 在這種情況下,您需要檢查整個數組。 這就是Array#some
或Array#every
的設計目的。 根據您的要求,您可以:
在任何一種情況下,您都在任何時間點檢查單個字符串。 為了清楚起見,我相信hasNumber
應該重命名為isNumber
。
const isNumber = (myString) => /\d/.test(myString);};
// ...
const hasNumber = filter.every(str => isNumber(str)) // if every element the array can be converted to a number
if (hasNumber) {
您可以在回調內部分支到Array.sort
:
1-如果元素包含數值,則根據這些值排序
2-else 按字母順序排序
function sortAlphaNumeric(arr) { return arr.sort((first,second) => { let re = /\d+/; if(re.test(first) && re.test(second)){ return parseInt(first.match(re) - parseInt(second.match(re))) } else{ return first.codePointAt(0) - second.codePointAt(0) } }) } console.log(sortAlphaNumeric(["12W", "60W", "25W"])) console.log(sortAlphaNumeric(["IP67", "IP68", "IP20"])) console.log(sortAlphaNumeric(["White", "Red", "Black"])) console.log(sortAlphaNumeric(["100cm", "10cm", "50cm"])) console.log(sortAlphaNumeric(["3000°K", "2700°K", "2000°K"]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.