如何使用提示输入循环遍历对象数组并显示属性

时间:2017-08-29 17:39:37

标签: javascript arrays loops jsobject

首先感谢您对我遇到的这个问题的任何回应。 我是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;
&#13;
&#13;

2 个答案:

答案 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;
    }
}