0

首先感谢您对我遇到的这个问题的任何回应。我是 JS 新手,觉得这段代码应该很简单,但它没有按预期工作。

我想按名称在数组中搜索这些对象,如果在数组中找到名称(通过提示获得),我想显示该对象的 id。

如果我在提示中输入“Jef”,我会得到 ID;但如果我输入“Steve”或“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)
  }
}

4

2 回答 2

1

你这样做的方式很接近。您只需要将 prompt() 放在循环之外。一旦有了要搜索的输入,就可以遍历整个对象数组。

例如:

var nameInput = prompt();
for (i =0; i < array.length; i++){
    if (nameInput == array[i].name) {
       console.log(array[i].id)
    }
}

小解释

由于您的提示处于一个循环中,该循环也循环您的对象数组,因此在该给定提示点只能有 1 个“正确”答案 - 无论array[i].name循环当前处于何种索引 ()。

要查看更多我的意思,请运行您当前的代码并jef在第一次出现提示时输入,Steve第二次和Ryan第三次 - 这样可以获得您的 ID,但可能不是您想要的结果。

于 2017-08-29T18:02:16.627 回答
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;
    }
}
于 2017-08-29T17:48:33.887 回答