我有一个输入字段,用户输入他们的邮政编码然后尝试匹配数组中的邮政编码。虽然以下工作,我需要它实际显示一个警告对话框,一旦说没有找到邮政编码,但是,即使邮政编码在列表中,它也会弹出很多。
这是我的代码段:
_zipcodeBtn.onclick = function(){
var userZip = _zipcode.value;
for (var i = 0; i < zipcode_list.length; i++) {
if (zipcode_list[i] === userZip) {
console.log('works');
break;
} else {
alert("repeating");
}
}
};
我希望它检查他们的zip是否可用而没有它也多次重复else语句。什么是阻止这种情况的最好方法?
答案 0 :(得分:2)
通过引用数组的indexOf()
方法(docs),可以更轻松地查找数组中的项目。
if (zipcode_list.indexOf(userZip) != -1) {
//found - do something
} else
alert('Zip not found!');
正如Angel Politis所示,如果你只是想知道一个项目是否在一个数组中,而不是它在其中的实际位置,你也可以使用includes()
。
旁注:使用indexOf()
时检查-1非常重要,因为它返回找到搜索的索引 - 如果不是则返回-1。如果在第一个键处找到搜索,则该值为0,而0是一个假值,当他们执行以下操作时,有时可能会将人员赶出:
var arr = [1, 2, 3];
if (arr.indexOf(1))
alert('success');
else
alert('failed');
你认为成功警报会在这里触发,但实际上它会成为失败警报,因为在这种情况下indexOf()
返回0,而当它是&#39时0是一个假值在一个条件下审讯。
答案 1 :(得分:1)
这里不需要使用循环。你可以说:
if (!zipcode_list.includes(userZip)) alert("Doesn't work!");
如果必须使用循环,则只需将标记设置为false
,然后,如果找到zip,则将其设置为true
。然后你可以在循环外检查它:
/* Create a flag and set it by default to false. */
var found = false;
/* Loop */
for (var i = 0, l = zipcode_list.length; i < l; i++) {
if (zipcode_list[i] === userZip) {
/* Set the flag to true and stop the loop. */
found = true;
break;
}
}
/* Check whether the zip was found in the array. */
if (found) console.log("Works!");
else alert("Doesn't work!");