使用for循环将键值对分隔为两个变量

Separating key value pairs into two variables with for loop

本文关键字:两个 变量 循环 for 键值对 分隔 使用      更新时间:2023-09-26

编辑:不要这样做。这是我刚开始编程时尝试过的一种愚蠢的方法

我有一个数组中包含32个数据的列表,它们像这样配对

"foo:bar","baz:example","cat:dog"

,我想循环遍历该数组,并停在与用户输入匹配的那对上。例如,如果用户输入"foo"它会分别返回"foo"answers"bar"如果用户输入"bar"它会同时返回"foo"answers"bar"。没有重复的值。

现在我有一个包含if语句的大表。所以if用户的输入是x,然后它返回正确的值。我必须手动进行匹配,并且我假设循环遍历数组直到找到正确的值将比64个不同的if s更有效。

我尝试过这样的事情(只是一个例子)使用两个单独的数组:

for (var i=0;i<array.length;i++) {
    if (array[i] === user_input) {
        var index = indexOf(array[i]);
    break;
    }
}

,然后使用index变量作为每个数组中值的索引号,但它返回undefined

我也尝试过:将键和值对分开到两个数组

但是它给了我数组中的所有值,这是我不想要的。我只需要用户输入的一个特定值。虽然我可以使用索引号选择数组的一个特定部分,但我不知道如何使其动态(例如根据用户输入的内容进行更改)。

这是可能的吗?如果没有,最好的方法是什么?

谢谢。

你可以这样做:

function getPair(arr, search) {
    var rtn = arr.filter(function (v, i) {
        return new RegExp("''b" + search + "''b").test(v);
    })[0];
    return rtn ? rtn.split(':') : -1;
}

像这样使用:

var array = ["foo:bar","baz:example","cat:dog"];
getPair(array, "foo"); //  ["foo","bar"]

注意:如果在数组中没有找到搜索字符串,则上述函数返回-1

这是一个遍历数组的函数,并检查user_input是否在任何地方。如果是,它将返回找到匹配的字符串。

function getPair(array, user_input) {
  for (var i=0;i<array.length;i++) {
      var pair = array[i].split(':');
      if (pair.indexOf(user_input) >= 0) {
          return pair;
      }
  }
  return [];
}
var array = ["foo:bar","baz:example","cat:dog"];
getPair(array, "foo"); //will return ['foo', 'bar']
getPair(array, "bar"); //will return ['foo', 'bar']
getPair(array, "dog"); //will return ['cat', 'dog']
getPair(array, "zzz"); //will return []

我建议使用对象。首先,转换数组:

var pair,obj1={},obj2={};
for (var i=0;i<array.length;i++) {
  pair=array[i].split(":");
  obj1[pair[0]]=pair[1];
  obj2[pair[1]]=pair[0];
}

这将给你以下对象:

obj1={
  "foo":"bar",
  "baz":"example",
  "cat":"dog"
};
obj2={
  "bar":"foo",
  "example":"baz",
  "dog":"cat"
};

然后根据用户输入:

if (obj1[user_input]) {return [user_input,obj1[user_input]];}
else if (obj2[user_input]) {return [obj2[user_input],user_input];}
else return undefined;

现场演示:http://jsfiddle.net/x23qG/