给定一组单词,我需要将它们放在键入该单词首字母的哈希值中。 我有单词= {},键为A..Z,数字和符号为0。 我正在做类似
的事情var firstLetter = name.charAt(0);
firstLetter = firstLetter.toUpperCase();
if (firstLetter < "A" || firstLetter > "Z") {
firstLetter = "0";
}
if (words[firstLetter] === undefined) {
words[firstLetter] = [];
}
words[firstLetter].push(name);
但这与dieresis和其他字符失败,例如Ärzteversorgung这个词。 那个词放在“0”数组中,我怎么能把它放在“A”数组中?
答案 0 :(得分:15)
你可以用它来测试一个角色可能是一个字母:
var firstLetter = name.charAt(0).toUpperCase();
if( firstLetter.toLowerCase() != firstLetter) {
// it's a letter
}
else {
// it's a symbol
}
这是因为JavaScript已经有一个小写字母到大写字母的映射(反之亦然),所以如果一个字符没有被toLowerCase()
改变,那么它就不在字母表中。
答案 1 :(得分:4)
您可以使用正则表达式。不幸的是,JavaScript并不认为国际字符是“单词字符”。但你可以用下面的正则表达式来做到这一点:
var firstLetter = name.charAt(0);
firstLetter = firstLetter.toUpperCase();
if (!firstLetter.match(/^\wÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöüçÇßØøÅåÆæÞþÐð$/)) {
firstLetter = "0";
}
if (words[firstLetter] === undefined) {
words[firstLetter] = [];
}
words[firstLetter].push(name);
答案 2 :(得分:3)
尝试将字符转换为大写和小写,然后检查是否存在差异。只有字母字符在转换为各自的大写和小写字母时才会更改(数字,标点符号等等)。下面是一个使用这个概念的示例函数:
function isALetter(charVal)
{
if( charVal.toUpperCase() != charVal.toLowerCase() )
return true;
else
return false;
}
答案 3 :(得分:2)
您可以使用.charCodeAt(0);
获取ASCII图表中的位置,然后进行一些检查。
您正在寻找的范围可能是65-90,97-122,128-154,160-165(含),但请仔细查看ASCII Chart
像这样的东西
if((x>64&&x<91)||(x>96&&x<123)||(x>127&&x<155)||(x>159&&x<166))
x
是Char Code
答案 4 :(得分:1)
幸运的是,现在无需外部库即可实现。直接来自the docs:
let story = "It’s the Cheshire Cat: now I shall have somebody to talk to.";
// Most explicit form
story.match(/\p{General_Category=Letter}/gu);
// It is not mandatory to use the property name for General categories
story.match(/\p{Letter}/gu);