检查两个或多个数组中是否存在一个值

时间:2018-12-04 21:18:23

标签: javascript arrays input

我正在尝试针对两个或数组检查用户输入值,以查看用户输入的值是否等于数组之一中的值。根据输入值等于哪个数组,我要显示特定的警报消息。

到目前为止,我有这个:

var zip = document.getElementById('zip').value;
var zone1 = ['11220', '11223', '11224', '11225', '11226','11228'];
var zone2 = ['10038', '10001'];

因此,如果用户输入邮政编码11220,我想显示一条消息:“价格:$ 50”。如果用户输入10038,我希望显示消息“价格:$ 75”。

最简单,最有效的方法是什么?

5 个答案:

答案 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">