首先感谢您对我遇到的这个问题的任何回应。 我是JS的新手,并认为这段代码应该非常简单,但它并没有按预期工作。
我想按名称搜索数组中的这些对象,如果在数组中找到名称(通过提示获得),我想显示该对象的id。
如果我输入' Jef'进入提示,我得到了ID;但是,如果我输入史蒂夫'或者' Ryan'我一无所获。我还注意到,无论我输入什么内容,循环似乎都会结束而不会添加中断。我认为循环是破碎的,但我不知道是什么原因导致它在“如果'条件得到满足。请帮忙!
var array = [{
name: 'Jef',
age: 29,
id: '000'
}, {
name: 'Steve',
age: 28,
id: '001'
},
{
name: 'Ryan',
age: 28,
id: '002'
}
];
var i;
for (i = 0; i < array.length; i++) {
if (prompt() == array[i].name) {
console.log(array[i].id)
}
}
&#13;
答案 0 :(得分:1)
你这样做的方式很接近。你只需要将prompt()放在循环之外。一旦有了搜索输入,就可以循环遍历整个对象数组。
例如:
var nameInput = prompt();
for (i =0; i < array.length; i++){
if (nameInput == array[i].name) {
console.log(array[i].id)
}
}
小解释
由于你的提示是在循环中也循环你的对象数组,因此只能有1&#34;正确&#34;在给定的提示点回答 - 无论索引(array[i].name
)当前循环是什么。
要了解更多我的意思,请在首次出现提示时运行当前代码并输入jef
,第二次Steve
,第三次Ryan
- 这样得到你的身份证,但可能不是你想要的结果。
答案 1 :(得分:0)
试试这个。您需要对数组进行排序并执行强匹配,然后返回ID。
function NameExists(strName,objectArray)
{
//convert to lower for type sensitive
strName = strName.toLowerCase();
for(var i = 0; i <objectArray.length; i++)
{
//convert to lower for type sensitive
var comparison = objectArray[i].Name.toLowerCase();
if(comparison.match(strName)==comparison)
return objectArray[i].id;
}
}