我正在尝试针对两个或数组检查用户输入值,以查看用户输入的值是否等于数组之一中的值。根据输入值等于哪个数组,我要显示特定的警报消息。
到目前为止,我有这个:
var zip = document.getElementById('zip').value;
var zone1 = ['11220', '11223', '11224', '11225', '11226','11228'];
var zone2 = ['10038', '10001'];
因此,如果用户输入邮政编码11220,我想显示一条消息:“价格:$ 50”。如果用户输入10038,我希望显示消息“价格:$ 75”。
最简单,最有效的方法是什么?
答案 0 :(得分:1)
我最近有一个类似的任务,我是这样解决的。
调整代码以对传递给forEach
的函数中的任何元素执行所需的操作。
var zone1 = ['11220', '11223', '11224', '11225', '11226','11228'],
zone2 = ['10038', '10001'],
zones = [[zone1, 50], [zone2, 75], ]
.map(([zone, price]) => [new Set(zone), price]);
var userValue = '11220';
zones
.filter(([zone, price]) => zone.has(userValue))
.map(([zone, price]) => price)
.forEach((price) => console.log(`Price: $${price}`))
var userValue = '10001';
zones
.filter(([zone, price]) => zone.has(userValue))
.map(([zone, price]) => price)
.forEach((price) => console.log(`Price: $${price}`))
//Handle bad values, too, by defining a function
function getPrices(value){
return zones
.filter(([zone, price]) => zone.has(value))
.map(([zone, price]) => price)
}
var someNonExistentValue = 'xxx';
results = getPrices(someNonExistentValue);
if (results.length){
results.forEach(foundItem => console.log(foundItem));
} else {
console.log('No items found!');
}
输出:
价格:50美元
价格:75美元
未找到任何物品!
答案 1 :(得分:0)
您需要询问Google问题并尝试形成自己的解决方案。仅当您的代码中存在永久性错误时,才应询问该错误。这是免费赠品:
if(zone1.indexOf(zip)!==-1){alert("Price: $50");}
elseif(zone2.indexOf(zip)!==-1){alert("Price: $75");}
答案 2 :(得分:0)
如果您想提高效率,则不应该使用数组,而应该使用由邮政编码(或使用ES6 var zones = {
11220: 1, 11223: 1, 11224: 1, 11225: 1, 11226: 1, 11228: 1,
10038: 2, 10001: 2
};
var messages = ["Unknown", "Price $50", "Price $75"];
var zip = document.getElementById('zip');
var msg = document.getElementById('msg');
zip.oninput = function() {
msg.textContent = messages[zones[this.value] || 0];
};
键控)的普通对象:
Zip: <input id="zip">
<div id="msg"></div>
{{1}}
答案 3 :(得分:0)
尝试一下
var zip = document.getElementById('zip').value;
var zone1 = ['11220', '11223', '11224', '11225', '11226','11228'];
var zone2 = ['10038', '10001']
if(zone1.includes(zip))
alert("Price: $50");
else if (zone2.includes(zip))
alert("Price: $75");
答案 4 :(得分:0)
您可以简单地使用Array.prototype.indexOf
方法来检查值是否作为数组元素存在。
var zone1 = ['11220', '11223', '11224', '11225', '11226', '11228'];
var zone2 = ['10038', '10001'];
document.getElementById('zip').addEventListener('change', (e) => {
if (e.target.value.length === 5) {
if (checkExists(e.target.value, zone1)) {
console.log(`${e.target.value} found in zone1`);
} else if (checkExists(e.target.value, zone2)) {
console.log(`${e.target.value} found in zone2`);
} else {
console.log(`${e.target.value} not in any zone!`);
}
}
});
function checkExists(needle, haystack) {
return haystack.indexOf(needle) > -1;
}
Enter a zip code then click outside the textfield to validate<br>
<input id="zip" type="text">