代码之家  ›  专栏  ›  技术社区  ›  Riya

javascript:根据字符串所包含的数字对字符串进行排序

  •  2
  • Riya  · 技术社区  · 7 年前

    我正在尝试对包含1-9之间的单个数字的字符串进行排序。例如,字符串为“ho2w are1 y3ou”,则结果字符串应为 “Are1 ho2w y3您” . 为此,我使用了for…of循环迭代一个字符串,并使用split将其转换为一个字符串数组,然后使用sort方法,但我没有得到输出。有人能建议我的程序有什么问题吗?

    代码:

    function order(words){
    let result = "";
    for (let value of words) {
      result += value;
    }
    
    let splited = result.split(" ");
      if(words === ""){
        return "";
      }
      return splited.sort((a,b) => a - b);
    
    }
    
    order("Ho2w are1 y3ou");
    
    3 回复  |  直到 7 年前
        1
  •  4
  •   Mark    7 年前

    你需要在单词中找到你想用来排序的数字。一种方法是 String.match() 和正则表达式:

    let str =  "Ho2w are1 y3ou"
    
    let sorted = 
    str.split(' ')
    .sort((a,b) => a.match(/\d+/)[0] -  b.match(/\d+/)[0]) // sort based on first number found
    .join(' ')
    
    console.log(sorted)
        2
  •  0
  •   Ele    7 年前

    您可以使用regexp /\s+/ 对于拆分数组,这样也可以匹配选项卡。以及正则表达式 [^\d+]/g 删除那些不是数字的字符,只与数字进行比较。

    let str = "Ho2w are1 y3ou"
    
    let sorted = str.split(/\s+/)
      .sort((a, b) => a.replace(/[^\d+]/g, '') - b.replace(/[^\d+]/g, '')).join(' ');
    
    console.log(sorted);
        3
  •  0
  •   slider    7 年前

    您还可以使用提取字符 filter isNaN 然后使用 parseInt 以获取用于排序函数的整数值。

    const str = "are1 Ho2w y3ou";
    
    const ordered = str.split(" ").sort((a, b) => {
      let numA = parseInt([...a].filter(c => !isNaN(c)).join(''));
          numB = parseInt([...b].filter(c => !isNaN(c)).join(''));
      return numA - numB;
    }).join(' ');
    
    console.log(ordered);