javascript - string.prototype.localeCompare(),脚本修改
问题描述
我有这个代码:
<!DOCTYPE HTML>
<html>
<head>
<title>
Sort a list alphabetically
</title>
<script src =
"https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js">
</script>
</head>
<body>
<button>
click here
</button>
<ul>
<li>Geeks</li>
<li>Sosna</li>
<li>Zebra</li>
<li>GeeksForGeeks</li>
<li><h1>G</h1></li>
<li><h1>F</h1></li>
<li>Arbuz</li>
<li><h1>A</h1></li>
<li>Łódź</li>
<li><h1>Ł</h1></li>
<li>ósmy</li>
<li><h1>Ó</h1></li>
<li>święty</li>
<li><h1>Ś</h1></li>
<li>ärgern</li>
<li><h1>Ä</h1></li>
<li>Österreich</li>
<li><h1>Ö</h1></li>
<li>Überraschung</li>
<li><h1>Ü</h1></li>
</ul>
<script>
function Ascending_sort(a, b) {
return ($(b).text().toUpperCase()) <
($(a).text().toUpperCase()) ? 1 : -1;
}
$('button').on('click', function() {
$("ul li").sort(Ascending_sort).appendTo('ul');
});
</script>
</body>
</html>
Codepen:https ://codepen.io/rudolph-reti/pen/dyPzXER
我刚开始学习 JavaScript。我一个人应付不了。我希望使用localeCompare()函数对列表进行排序。有人可以帮我把它写进剧本吗?
解决方案
.localeCompare()
已经返回预期的正确数字值.sort()
,因此您不必担心自己这样做
从文档中,返回值.localeCompare()
:
如果引用字符串出现在比较字符串之前,则为负数;如果引用字符串出现在比较字符串之后,则为正;如果它们相等,则为 0。
您的代码.localeCompare()
如下:
function Ascending_sort(a, b) {
b = $(b).text().trim().toUpperCase();
a = $(a).text().trim().toUpperCase();
return b.localeCompare(a);
}
$('button').on('click', function() {
$("ul li").sort(Ascending_sort).appendTo('ul');
});
在聊天中讨论之后,使用排序使使用字符串更有意义,并已添加到代码段中
const alphabet = "abcdefghijklmnopqrstuvwxyzäöüß";
function letterSort(a, b) {
b = $(b).text().trim().toLowerCase();
a = $(a).text().trim().toLowerCase();
// Find the first position were the strings do not match
let position = 0;
while(a[position] === b[position]) {
// If both are the same don't swap
if(!a[position] && !b[position]) return 0;
// Otherwise the shorter one goes first
if(!a[position]) return 1;
if(!b[position]) return -1;
position++;
}
// Then sort by the characters position
return alphabet.indexOf(a[position]) - alphabet.indexOf(b[position]);
}
$('button').on('click', function() {
$("ul li").sort(letterSort).appendTo('ul');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
<button>Click here</button>
<ul>
<li>Geeks</li>
<li>Sosna</li>
<li>Zebra</li>
<li>GeeksForGeeks</li>
<li>
<h1>G</h1>
</li>
<li>
<h1>F</h1>
</li>
<li>Arbuz</li>
<li>
<h1>A</h1>
</li>
<li>Łódź</li>
<li>
<h1>Ł</h1>
</li>
<li>ósmy</li>
<li>
<h1>Ó</h1>
</li>
<li>święty</li>
<li>
<h1>Ś</h1>
</li>
<li>ärgern</li>
<li>
<h1>Ä</h1>
</li>
<li>Österreich</li>
<li>
<h1>Ö</h1>
</li>
<li>Überraschung</li>
<li>
<h1>Ü</h1>
</li>
</ul>
</body>
推荐阅读
- javascript - 通过单击按钮 php 将 javascript 数组插入数据库
- c++ - 为什么 std::atomic 中的所有成员函数都有 volatile 和没有 volatile?
- android - 如何让CombinedChart-BarChart平均分布在x轴上?
- hibernate - CriteriaQuery entity.list 有值
- windows - 与 VS2013(Platform Toolkit v120)相比,使用 VS2017(Platform Toolkit v141)构建的相同二进制文件的性能非常低
- c# - 如何从局域网运行 .mdf 数据库?
- r - 根据特定条件在新列中归因变量在不同年份的差异
- apache-spark - 确定性和非确定性 Spark UDAF 之间的区别
- oracle - Oracle Connect By vs Recursive User-Defined Function 性能
- scala - 当我到达端点一次时,@Karate Gatling 没有生成报告