簡體   English   中英

Javascript 對包含數字的字符串數組進行排序

[英]Javascript sort an array of strings that containing numbers

我正在嘗試對有時包含數字的字符串數組進行排序。

以下是可能收到的數組示例和預期結果:

  • [“12W”、“60W”、“25W”] -> [“12W”、“25W”、“60W”]
  • [“IP67”、“IP68”、“IP20”] -> [“IP20”、“IP67”、“IP68”]
  • [“白色”、“紅色”、“黑色”] -> [“黑色”、“紅色”、“白色”]
  • ["100cm", "10cm", "50cm"] -> ["10cm","50cm","100cm"]
  • ["3000°K", "2700°K", "2000°K"] -> ["2000°K","2700°K","3000°K"]

這是我的實際代碼: 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#someArray#every的設計目的。 根據您的要求,您可以:

  1. 檢查數組中的每個元素是否可以轉換為數字或
  2. 檢查是否至少可以轉換一個元素。

在任何一種情況下,您都在任何時間點檢查單個字符串。 為了清楚起見,我相信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.

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