javascript程序的Else块总是执行,即使If块为真

Else block of javascript program always executes even If block is true

本文关键字:即使 If 执行 程序 Else javascript      更新时间:2023-09-26

Else块即使为真也会继续执行。如果我删除else块,那么程序工作正常。我所要做的就是检查用户是否不在记录中,然后打印not found。

var students = 
[
	{
		name: "Linda",
		track: "IOS",
		points:' 50'
	},
	{
		name: "Brian",
		track: "Android",
		points: '80'
	},
	{
	    name: 'Trish',
	    track: 'Rails Development',
	    points: '350'
	}
];
 		var search = " ";
  		var student;
  		var message = " ";
	function print ( msg )
	{
		var output = document.getElementById("output");
		output.innerHTML = msg;
	}
	function studentReport( student )
	{
		var report 	= "<h2> Student name: " + " " + student.name + "</h2>";
			report += "<p>  Student track: " + " " + student.track+ "</p>";
			report += "<p>  Student points: "+ " " + student.points+ "</p>";
			return report;
	} 
	var button = document.getElementById("search");
		/*search = prompt("Enter a name to search database or type quit to exit");*/
		button.onclick = function( )
	{
		
		search = document.getElementById("txtField").value;
		for( var i = 0; i < students.length; i++ )
		{
			student = students[i];
			if( student.name.toLowerCase() === search.toLowerCase() )
			{
				message = studentReport(student);
				print(message);
			}
			
			else
			{
				message = "<h2> Student not found </h2>";
				print( message);
			}
		}
		
		
	}
		
<div class="container">
		<form action="#">
			<input type="text" name="search" id="txtField"><!--
			--><a href="#" id="search"> Search </a>
		</form>
		
	<div id="output">
	</div>
	</div>

通过删除else部分程序搜索名称并显示学生记录。Else部分应该检查student是否不在数组中,然后打印not found。

break;添加到if语句中,因此循环停止计算。否则,只有最后一个结果将更新HTML。

尝试改变,

if( student.name.toLowerCase() === search.toLowerCase() )
        {
            message = studentReport(student);
            print(message);
        }

if( student.name.toLowerCase() === search.toLowerCase() )
        {
            message = studentReport(student);
            print(message);
            break;
        }

如果在找到学生后中断,将找到第一个匹配(或显示没有找到学生)。如果您想显示找到的所有学生,我看到了两种方法,您可以创建找到的所有学生的列表,或者构造包含所有信息的html字符串。我将创建一个包含所有找到的学生的列表——创建一个字符串非常类似。

findStudents = function(search) {
    var foundStudents = [];
    for(var i = 0; i < students.length; ++i) {
        if(students[i].name.toLowerCase() === search.toLowerCase()) {
            foundStudents.push(students[i]);
        }
    }
    return foundStudents;
}

这将创建一个所有找到的学生的列表,从这里你可以很容易地渲染他们,如果列表是空的(即没有找到),你可以显示没有找到学生。

你当前的代码总是执行学生。Length乘以并设置变量msg,因此只有最后一个学生重要。如果搜索字符串与最后一个学生相同,将找到正确的字符串。