Javascript 按升序对不同行上的名称进行排序和显示
我的教授希望我们编写一个JavaScript代码,提示用户输入3个名称(一次一个)。该计划应该 按升序对不同行上的名称进行排序和显示 这就是我目前所拥有的Javascript 按升序对不同行上的名称进行排序和显示,javascript,sorting,Javascript,Sorting,我的教授希望我们编写一个JavaScript代码,提示用户输入3个名称(一次一个)。该计划应该 按升序对不同行上的名称进行排序和显示 这就是我目前所拥有的 <html> <head> <title>Day 2 - Example 2</title> </head> <body> <center> <script language="javascript"> var na1,na2,na3;
<html>
<head>
<title>Day 2 - Example 2</title>
</head>
<body>
<center>
<script language="javascript">
var na1,na2,na3;
na1=prompt("Enter your first name:","");
na2=prompt("Enter your second name:","");
na3=prompt("Enter your third name","");
</script>
</center>
</body>
</html>
第2天-示例2
变种na1,na2,na3;
na1=提示(“输入您的名字:”,”);
na2=提示(“输入您的第二个名字:”,“”);
na3=提示(“输入您的第三个名字”);
您可以将用户输入的名称存储到数组中,然后使用:
函数名称排序(){
变量名称=[];
var name1=提示(“请输入第一个名称”);
名称[0]=name1;
var name2=提示(“请输入第二个名称”);
名称[1]=名称2;
var name3=提示(“请输入第二个名称”);
名称[2]=名称3;
name.sort();
document.getElementById(“firstName”).innerHTML=names[0];
document.getElementById(“secondName”).innerHTML=names[1];
document.getElementById(“lastName”).innerHTML=names[2];
}
单击按钮可输入3个名称(一次一个)。程序将按升序对不同行上的名称进行排序和显示
输入姓名
我想你的教授希望你在这个过程中学到一些东西,所以我试着向你解释如何解决这个问题。请随时提出任何后续问题
所以,你有三个名字,在三个不同的变量中
您有两个主要问题:比较名称,以及根据比较结果对名称进行排序
让我们一步一步走
比较两个名字意味着什么?或者,在另一个世界,一个名字在另一个名字之前意味着什么
为了简单起见,让我们假设插入的名称只包含从a到z的字符,无论是小写还是大写。没有数字,没有特殊字符(如è)或其他任何东西(您最终可以尝试扩展代码以处理其他字符)
因此,为了比较这两个名称,我们创建了一个函数,该函数将两个名称作为参数,如果第一个名称位于第二个名称之前,则返回-1
,如果它们相等,则返回0
,否则返回1
函数将类似于以下内容:
function compare(name1, name2) {
// Do same magic stuff
return -1;
}
首先,我们可以比较名字的第一个字母,并检查哪一个先到。
从字符串中提取字符的最佳方法是使用函数。您也可以将字符串作为数组访问,但它在IE7上不起作用,从学术角度来看是错误的
但在现实世界中,写name[1]
与写name.charAt(1)
肯定更好
但是这个代码的另一个问题是,如果有人用大写字母插入她的名字,她将总是在只使用小写字母插入名字的人之前
因此,在我们的例子中,alice
将位于Bob
之后
我们需要比较相同的字符,因此我们将只比较小写字符。要将名称转换为所有小写字母,我们使用函数
但若一个名字是另一个名字的子字符串(即Ali和Alice),该怎么办
for循环将结束,因此我们需要另一个条件。
让我们先说一个较短的名字
if (name1.lenght < name2.length) return -1;
return 1;
现在,你当然不会在现实世界中使用这样的解决方案。
首先,因为我漏掉了很多角落案例(当函数compare返回0时也被忽略)
其次,主要是因为您没有利用Javascript本机函数
@shash679的答案向您展示了解决方案的真实实现
但无论如何,我希望你喜欢这个解释,主要是你现在很好奇,想了解更多关于Javascript和计算机科学的知识
写代码不是写代码,更多的是解决谜题,而且很有趣
祝你的课程好运 Java对于JavaScript就像汽车对于地毯一样重要。他们没有关系。也,
function compare(name1, name2) {
if (name1 === name2) return 0;
if (name1.charAt(0) < name2.charAt(0)) return -1;
if (name1.charAt(0) > name2.charAt(0)) return 1;
}
function compare(name1, name2) {
name1 = name1.toLowerCase();
name2 = name2.toLowerCase();
if (name1 === name2) return 0;
if (name1.charAt(0) < name2.charAt(0)) return -1;
if (name1.charAt(0) > name2.charAt(0)) return 1;
}
for (var i = 0; i < lengthOfShorterName; i++) {
if (name1.charAt(i) > name2.charAt(i)) return 1;
if (name1.charAt(i) < name2.charAt(i)) return -1;
}
if (name1.lenght < name2.length) return -1;
return 1;
function compare(name1, name2) {
name1 = name1.toLowerCase();
name2 = name2.toLowerCase();
if (name1 === name2) return 0;
var lengthOfShorterName = Math.min(name1.length, name2.length)
for (var i = 0; i < lengthOfShorterName; i++) {
if (name1.charAt(i) > name2.charAt(i)) return 1;
if (name1.charAt(i) < name2.charAt(i)) return -1;
}
if (name1.lenght < name2.length) return -1;
return 1;
}
var na1_na2 = compare(na1, na2);
var na1_na3 = compare(na1, na3);
var na2_na3 = compare(na2, na3);
// We create the place where we will save the names
var first, second, third;
if (na1_na2 === -1) {
// na1 comes before na2! Will it come also before na3?
if (na1_na3 === -1) {
// Yes! So na1 is the first!
first = na1;
// But who is second?
if (na2_na3 === -1) {
// na2 is second!
second = na2;
third = na3;
} else {
// na3 is second!
second = na3;
third = na2;
}
} else {
// na3 is before na1, therefore is first!
first = na3
second = na1;
third = na2;
}
} else {
// na2 is before na1. What do we need to compare?
}