我编写了一个使用.sort()
方法按字母顺序排列的函数。目前,该功能仅适用于小写字母。我如何修复此函数,以便将大写字母视为小写字母?例如,C在a之前排序,这没有任何意义。
这是我的代码:
document.getElementById("btn").addEventListener('click', alphabetize);
function alphabetize () {
var output;
var input = document.getElementById('input').value;
input = input.split('').sort().join('');
output = input;
document.getElementById('output').value = output;
}
<input type="text" id="input" /><br />
<input type="text" id="output" /><br />
<button id="btn">Alphabetize String </button>
答案 0 :(得分:2)
试试这个:
function alphabetize () {
var output;
var input = document.getElementById('input').value;
input = input.toLowerCase().split('').sort().join('');
output = input;
document.getElementById('output').value = output;
}
//Input: "Charlie"
//Output: "acehilr"
答案 1 :(得分:0)
请参阅Array.protoype.sort
文档,其中包含示例:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
答案 2 :(得分:0)
你要做的是比较和排序混合大小写的字母,但JavaScript实际上做的是比较这些字母的Unicode代码点值并相应地对它们进行排序,以免过于简单化,JavaScript没有知道人物如何相互比较 - 人类大脑很容易看到这些&#34; C&#34;应该追随&#34; a&#34;但是不同的字母或甚至非字母符号的字母应该如何相互比较?
将英文字母的字母转换为字符代码,大写字母AZ由65-90表示,小写字母az由97-122表示,这解释了为什么,在sort()
,&#中34; C&#34;即将到来&#34; a&#34; (67&LT; 97)。
我们需要做的是比较喜欢,全部小写或全部大写字母。最简单的方法是在应用.toLowerCase
之前转换输入字符串.toUpperCase
或sort()
,但这将导致输出字符串的不良结果在一个案例中,而不是在原始输入的混合情况下。
因此,解决方案是在比较期间将每个字符转换为相同的大小写,保持原始情况不变。我们将compareFunction
传递给sort()
方法,如下所示:
(function(){
var output=function(input){
return input.split("").sort(function(a,b){
return a.toLowerCase()>b.toLowerCase();
}).join("");
};
console.log(output("Charlie"));
console.log(output("Shaggy"));
})();
&#13;
另一种方法是使用localeCompare()
比较2个字符而不进行大小写转换,这样可以比较重音字符:
(function(){
var output=function(input){
return input.split("").sort(function(a,b){
return a.localeCompare(b);
}).join("");
};
console.log(output("Charlie"));
console.log(output("Shaggy"));
})();
&#13;
如果ES6是您的选项,您可以使用spread operator将字符串拆分为单独的字母,将arrow function拆分为compareFunction
,如下所示:
{
const output=input=>[...input].sort((a,b)=>a.toLowerCase()>b.toLowerCase()).join("");
/*ALTERNATIVES*/
//const output=([...input])=>input.sort((a,b)=>a.localeCompare(b)).join("");
//const output=input=>input.split``.sort((a,b)=>a.localeCompare(b)).join("");
console.log(output("Charlie"));
console.log(output("Shaggy"));
}
&#13;
注意:我假设任何需要执行的字符串操作(例如,修剪空格)和检查(例如,零长度字符串,非字母字符)已经是你的代码。