如何从UTF-16返回字母

时间:2019-01-03 04:35:26

标签: javascript

我需要按字母顺序返回单词中的字母。我遇到以下问题,我不知道如何从数字中返回字母,我尝试使用String.fromCharCode()charAt(),但是它什么也没做。 我得到了:

function AlphabetSoup(str) { 

  let spl = str.split('');
let res = spl.map(order => order.charCodeAt()).sort((a,b) => b - a).reverse();

 return res;
}

结果是[ 98, 99, 100, 101, 101, 111, 114, 116, 121 ]

2 个答案:

答案 0 :(得分:1)

默认情况下,.sort()已按其UTF-16字符串表示形式对值进行排序。

  

默认的排序顺序是基于将元素转换为字符串,然后比较其UTF-16代码单元值的序列。

function AlphabetSoup(str) {
  return str.split('').sort();
}

var r = AlphabetSoup("HelloWorld");
console.log(r);

如果您坚持使用建议的方法,则可以使用map将值重新String.fromCharCode()重新返回为它们的字符串表示形式。

function AlphabetSoup(str) {

  let spl = str.split('');
  let res = spl
    .map(order => order.charCodeAt())
    .sort((a, b) => a-b)
    .map(order => String.fromCharCode(order));

  return res;
}

var r = AlphabetSoup("HelloWorld");
console.log(r);

答案 1 :(得分:0)

console.log(AlphabetSoup('hello'))
console.log(AlphabetSoup2('hello'))

/* Given what you gave, you have to convert it back */
function AlphabetSoup(str) {
  let spl = str.split('');
  let res = spl.map(char => char.charCodeAt())
               .sort((a, b) => b - a)
               .reverse()
               .map(ascii=>String.fromCharCode(ascii))  // <-- convert back
               .join('');                               // <-- make it a string

  return res;
}


/* Of course string comparison natively works on ASCII values */
function AlphabetSoup2(str) {
  let arr = str.split('');
  return arr.sort((a, b) => b < a).join('');             // <-- notice the '<'
}

当然,sort()默认是您想要的,因此您可以通过return arr.sort().join('')

来减少露骨(更准确)