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

时间:2014-05-31 05:36:56

标签: javascript arrays if-statement for-loop

编辑:不要这样做。这是一种愚蠢的做事方式,当我刚接触编程

时,我做了一些尝试

我有一个数组中32个数据的列表,这些数据像这样配对

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

我希望循环遍历该数组并停止匹配用户输入的对。因此,例如,如果用户键入" foo"它将返回" foo"和" bar"单独,如果用户输入" bar"它将返回" foo" &" bar"。没有重复的值。

现在我所拥有的是一个包含if语句的巨大表格。因此if用户的输入是 x ,然后它返回正确的值。我不得不亲自进行匹配,我假设循环遍历数组直到找到正确的值比64个不同的if更有效。

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

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

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

我也试过这个:Separate key and value pairs into two arrays

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

甚至可以这样做吗?如果没有,最好的方法是什么?

感谢。

3 个答案:

答案 0 :(得分:2)

你可以这样做:

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

答案 1 :(得分: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 []

答案 2 :(得分:1)

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

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/