如何实现JavaScript按字符出现位置排序?
按字符首次出现位置排序的实现方案
我懂你要的效果——不是按字母顺序排序,而是把相同字符都聚集到它第一次出现的位置后面,保持首次出现的顺序不变,同时把重复的字符都跟在后面。原代码里的sort()默认是按Unicode字符编码排序,所以才得到了字母序的结果,我们可以通过记录字符首次出现的位置来修改排序逻辑。
修改后的完整代码
<!DOCTYPE html> <html> <body> <p id="demo"></p> <script> const input = 'hello world'; document.getElementById("demo").innerHTML = sortAlphabets(input); function sortAlphabets(input) { const charArr = input.split(''); // 记录每个字符第一次出现的索引 const firstOccurrence = new Map(); charArr.forEach((char, index) => { if (!firstOccurrence.has(char)) { firstOccurrence.set(char, index); } }); // 按照字符首次出现的索引排序 return charArr.sort((a, b) => { return firstOccurrence.get(a) - firstOccurrence.get(b); }).join(''); }; </script> </body> </html>
代码解释
- 记录首次出现位置:用
Map遍历字符数组,只记录每个字符第一次出现的索引,这样重复字符都会共享同一个首次索引。 - 自定义排序逻辑:在
sort()的回调函数里,比较两个字符的首次出现索引,索引更小的(出现更早的)排在前面。 - 拼接结果:排序完成后把数组重新拼成字符串。
运行这段代码后,输入hello world会得到你预期的结果:hellloowrd。
内容的提问来源于stack exchange,提问作者Haminteu
相关产品推荐
相关产品推荐

