我正在研究这个在JSON对象中找到人的简单搜索功能。这是我的代码:
var personas = [
{
"name": "Luis",
"lastname": "Gomez",
"age": 25
},
{
"name": "Maria",
"lastname": "Lopez",
"age": 20
},
{
"name": "Lucero",
"lastname": "Perez",
"age": 30
},
{
"name": "Daniel",
"lastname": "Ruiz",
"age": 18
},
{
"name": "Teresa",
"lastname": "Ponce",
"age": 23
}
];
function myFunction(userInput){
if (userInput.length == 0) {
document.getElementById("info").innerHTML = "";
}else{
for(var i in personas){
if(personas[i].name === userInput){
document.getElementById("info").innerHTML = "Found";
}else{
document.getElementById("info").innerHTML = "Not Found";
}
}
}
}
<form >
Find person: <input type = "text" onkeyup="myFunction(this.value)"/>
</form>
<div id = "info"></div>
我的问题: 出于某种原因,如果我删除 else 语句:
else{
document.getElementById("info").innerHTML = "Not Found";
}
我的程序将能够找到该人的姓名。但是,假设我输入“Luis”,然后删除“s”,最后的字符串会说“Lui”。然而,即使“Lui”不存在,我的程序仍然会说“Found”。希望有人可以告诉我我做错了什么。先谢谢你。
答案 0 :(得分:1)
您可以使用find方法:
function myFunction(userInput){
if (userInput.length == 0) {
document.getElementById("info").innerHTML = "";
}else{
var persona = personas.find(function(persona) {
return persona.name === userInput;
})
if (persona) {
document.getElementById("info").innerHTML = "Found";
} else {
document.getElementById("info").innerHTML = "Not Found";
}
}
}
问题:如果删除else语句,则在找不到名称时不会更新UI。
答案 1 :(得分:1)
你不行。几个问题可能是:
nombre
代替name
name
,就应该打破循环。onkeydown
事件而不是onkeyup
事件,但现在看起来很好。运行代码在这里:
var personas = [
{
"name": "Luis",
"lastname": "Gomez",
"age": 25
},
{
"name": "Maria",
"lastname": "Lopez",
"age": 20
},
{
"name": "Lucero",
"lastname": "Perez",
"age": 30
},
{
"name": "Daniel",
"lastname": "Ruiz",
"age": 18
},
{
"name": "Teresa",
"lastname": "Ponce",
"age": 23
}
];
function myFunction(userInput){
if (userInput.length == 0) {
document.getElementById("info").innerHTML = "";
}else{
for(var i in personas){
if(personas[i].name === userInput){
document.getElementById("info").innerHTML = "Found";
break;
}else{
document.getElementById("info").innerHTML = "Not Found";
}
}
}
}
<form >
Find person: <input type = "text" onkeyup="myFunction(this.value)"/>
</form>
<div id = "info"></div>
答案 2 :(得分:0)
您还可以使用匹配的元素构建一个数组,并测试结果数组是否为空:
var personas = [
{
"name": "Luis",
"lastname": "Gomez",
"age": 25
},
{
"name": "Maria",
"lastname": "Lopez",
"age": 20
},
{
"name": "Lucero",
"lastname": "Perez",
"age": 30
},
{
"name": "Daniel",
"lastname": "Ruiz",
"age": 18
},
{
"name": "Teresa",
"lastname": "Ponce",
"age": 23
}
];
function myFunction(userInput){
if (userInput.length == 0)
document.getElementById("info").innerHTML = "";
else {
if (personas.filter(x => x.name === userInput).length > 0)
document.getElementById("info").innerHTML = "Found";
else
document.getElementById("info").innerHTML = "Not Found";
}
}
<form >
Find person: <input type = "text" onkeyup="myFunction(this.value)"/>
</form>
<div id = "info"></div>
答案 3 :(得分:0)
让我们看看当你写下else
陈述时会发生什么。
myFunction
被调用,其中userInput="L"
它不满足if
语句,因此没有任何反应。myFunction
被调用,userInput="Lu"
它不满足if
语句,因此没有任何反应。myFunction
被调用,userInput="Lui"
它不满足if
语句,因此没有任何反应。myFunction
被调用,其中userInput="Luis"
满足if
语句,因此Found
显示在info
中} div。myFunction
被调用,userInput="Lui"
它不满足if
语句,因此没有任何反应。但等等,info
div呢?如果没有else
声明,则无法更改innerHTML
div的info
。因此,由于步骤4,它会继续显示Found
。
您可以使用调试器并设置断点来自行尝试。