检查 2 个输入是否与二维数组中的数组元素匹配

时间:2021-05-06 23:38:34

标签: javascript arrays

基本上,我有一个非常大的二维数组,其中包含数千个数组,以 ['14167', 'Berlin'] 这样的形式表示邮政编码和城市的数据。
我需要做的是检查表单中邮政编码和城市的输入,看看它是否与数组中的数据相匹配:

  1. 如果在数组中找不到城市,则显示错误警报。
  2. 如果找到城市但邮政编码不匹配,则显示一个窗口,上面写着“您是这个意思吗?”并自动在表单中插入正确的邮政编码。
  3. 如果城市和邮政编码匹配,则显示一个显示匹配的窗口,然后应重置表单。

到目前为止我写的:

function zipCheck(arr,k){
    var check=[];
    for (var i = 0; i < arr.length; i++) {
        var index = arr[i].indexOf(k);
        if (index > -1) {
            var val = index - 1;
            check.push(arr[i][val]);
            return check;
        }
    }
}

我在这里尝试做的是尝试使用 indexOf 来检查城市输入的位置,并使用该位置将匹配的邮政编码推送到不同的数组。然后我将尝试检查邮政编码输入值以查看它是否与推送数组的任何元素匹配。我的代码的问题是我只能将第一个邮政编码值推送到检查数组,而可能仍然存在与该城市匹配的邮政编码。示例:['14131','Berlin'],['14163','Berlin'],['14165','Berlin'].

有人可以帮我修复我的代码还是有更有效的方法来做到这一点?提前致谢

2 个答案:

答案 0 :(得分:1)

您可以使用 filter() 查找城市的所有元素。然后使用 some() 测试他们中是否有输入的邮政编码。

function zipCheck(arr, city, zip) {
  let items = arr.filter(el => el[1] == city);
  if (!items) {
    alert(`City ${city} not found`);
  } else if (!items.some(el => el[0] == zip)) {
    alert(`Zip ${zip} is not found for ${city}`);
  }
}

答案 1 :(得分:0)

您需要将城市和邮政编码都传递给函数

过滤二维数组以检查所有带有城市的项目,然后绘制邮政编码。

首先,我检查 check 变量中是否有任何表示存在城市的元素,然后我检查传递的邮政编码是否存在。如果不是,它会提供我们检查变量中的第一个元素。否则警报匹配

function zipCheck(arr, city, zip) {
  const check = arr.filter(item => item[1] == city).map(item => item[0]);
  
  if (!check.length) console.log(`City ${city} does not exist`);
  else if (check.findIndex(item => item == zip) > -1) console.log(`Couldn't find zipcode ${zip} did you mean ${check[0]}`)
  else console.log(`Matched ${city}, ${zip}`);
}

const data = [['14131','Berlin'],['14163','Berlin'],['14165','Berlin']];

zipCheck(data, 'Berlin');
zipCheck(data, 'Home');