2016-08-10 74 views
3

我有一个像这样的字符串“is2 Thi1s T4est 3a”,我需要对它进行排序,所以 数组看起来像这样“Thi1s is2 3a T4est”。数字可以出现在字符串的任何地方。我知道如何按字母顺序排序字符串以及如何对数组进行排序,但在这种情况下它是如何完成的?有没有一种方法可以帮助对数字进行分类而忽略字母? 我一直在努力完成这项任务一段时间,任何帮助将不胜感激!根据子串中的数字对字符串排序

+0

你需要写一个函数来解析号码的开出每一个字符串,然后让他们到自己的完整号码。 – Trasiva

+0

这是一个字符串数组吗?我看到一个字符串。 – naomik

+0

是否有保证每个字符串只有一个数字? – TAGraves

回答

9

你可以在空间分割和基于存储在每个字符串的数值sort

let words = "is2 Thi1s T4est 3a".split(' '); 
 
words.sort((a, b) => a.replace(/[^\d]+/g, '') - b.replace(/[^\d]+/g, '')); 
 
console.log(words.join(' '));

+1

大声笑我的答案几乎与你的一样。我给你+1,并删除我的。 – naomik

2

首先定义一个比较功能。

compare = function(x, y) { 
    return x.match(/\d+/g)[0] - y.match(/\d+/g)[0]; 
} 

然后使用它。

var z = "is2 Thi1s T4est 3a"; 
z.split(" ").sort(compare).join(" "); 
//"Thi1s is2 3a T4est" 

或者如果你喜欢一个线,

z.split(" ").sort(function(x, y){return x.match(/\d+/g)[0] - y.match(/\d+/g)[0];}).join(" ") 
+0

谢谢您的评论! – Alex