【问题标题】:How to use prompt input to loop through an array of objects and display a property如何使用提示输入循环遍历对象数组并显示属性
【发布时间】:2017-08-30 04:14:55
【问题描述】:

首先感谢您对我遇到的这个问题的任何回复。 我是 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)
  }
}

【问题讨论】:

  • 当您按定义的顺序键入名称时,我会得到所有预期的响应。您是否有理由希望循环提示?循环并没有像你描述的那样结束。
  • 也许你在提示窗口中勾选了Prevent this page from creating additional dialogs复选框?

标签: javascript arrays loops jsobject


【解决方案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,但是可能不是你想要的结果。

【讨论】:

    【解决方案2】:

    试试这个。您需要对数组进行排序并执行强匹配,然后返回 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;
        }
    }
    

    【讨论】:

    • 感谢您的帮助。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多