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

问题描述 投票:2回答:3

我正在尝试对包含1-9中的单个数字的字符串进行排序。对于例如string是“Ho2w are1 y3ou”,那么结果字符串应为“are1 Ho2w y3ou”。为此,我已经使用了循环迭代字符串并使用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");
javascript
3个回答
4
投票

您需要以某种方式找到要用于排序的单词中的数字。一种方法是使用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)

0
投票

您可以使用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);

0
投票

您还可以使用filterisNaN提取字符,然后使用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);
© www.soinside.com 2019 - 2024. All rights reserved.