2016-07-31 130 views
0

我遇到了一些相对简单的问题。我必须对字符串的字符进行排序并返回已排序的字符串(使用Javascript)。在搜索答案后,我想出了解决方案,但出于某种原因,方法不会返回我预期的输出。使用Javascript按字母顺序排序字符串

var str = "Something"; 
var chars = []; 

for (var i = 0; i < str.length; i++) { 
    chars.push(str.charAt(i)); 
} 

chars.sort().join(""); 
console.log(chars); 

我接收的输出是这样的:

["S", "e", "g", "h", "i", "m", "n", "o", "t"] 

1)尽管使用。加入()方法的charachters仍然逗号分隔。也尝试使用.replace()方法,但这使我想到了第二个问题。

2.)虽然.join()应该返回一个字符串,但typeof字符仍然是一个对象。我也尝试使用.toString()方法,但输出的类型仍然是一个对象。

+0

'chars.push()'推到一个数组,所以逗号预计 - 使用'chars + ='代替 –

+0

请注意,默认'.sort()'不会按字母顺序排序,它会根据每个字符的Unicode代码点值进行排序。如果你全部使用小写字母或全部大写字母,那么最终会按字母顺序排列,但在你的情况下你不会。 (所以'''苹果''在'斑马'之后,但在'斑马'之前。) – nnnnnn

回答

4

join()不修改数组,但返回一个新的对象,目前您不使用该对象。所以,你的代码应该是这样的:

var str = "Something"; 
var chars = []; 

for (var i = 0; i < str.length; i++) { 
    chars.push(str.charAt(i)); 
} 

chars = chars.sort().join(""); 
console.log(chars); 

你可以,但是,这样做的一个班轮:

let chars = str.split('').sort().join(''); 
0
const sorted = str.split('').sort().join('')