Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用for循环将键值对分离为两个变量_Javascript_Arrays_If Statement_For Loop - Fatal编程技术网

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

Javascript 使用for循环将键值对分离为两个变量,javascript,arrays,if-statement,for-loop,Javascript,Arrays,If Statement,For Loop,编辑:不要这样做。这是我刚开始编程时尝试过的一种愚蠢的做法 我有一个数组中32条数据的列表,它们是这样成对的 "foo:bar","baz:example","cat:dog" 我想通过该数组循环,并在匹配用户输入的对上停止。因此,例如,如果用户在“foo”中键入,它将分别返回“foo”和“bar”;如果用户在“bar”中键入,它将同时返回“foo”和“bar”。没有重复的值 现在我有一个巨大的表,上面有if语句。因此如果用户的输入是x,则返回正确的值。我必须手动进行匹配,我假设在数组中循环直

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

我有一个数组中32条数据的列表,它们是这样成对的

"foo:bar","baz:example","cat:dog"
我想通过该数组循环,并在匹配用户输入的对上停止。因此,例如,如果用户在“foo”中键入,它将分别返回“foo”和“bar”;如果用户在“bar”中键入,它将同时返回“foo”和“bar”。没有重复的值

现在我有一个巨大的表,上面有
if
语句。因此
如果用户的输入是x,则返回正确的值。我必须手动进行匹配,我假设在数组中循环直到找到正确的值比64个不同的
if
s更有效

我使用两个独立的数组尝试了类似的方法(只是一个示例):

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

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

有可能做到这一点吗?如果没有,最好的办法是什么


谢谢。

这里有一个函数,它迭代数组,并检查
用户输入是否在任何地方。如果在任何地方,它将返回找到匹配的字符串

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 []
函数getPair(数组,用户输入){
对于(变量i=0;i=0){
返回对;
}
}
返回[];
}
var数组=[“foo:bar”、“baz:example”、“cat:dog”];
getPair(数组,“foo”);//将返回['foo','bar']
getPair(数组,“bar”);//将返回['foo','bar']
getPair(数组,“dog”);//将返回['cat','dog']
getPair(数组,“zzz”);//将返回[]
您可以执行以下操作:

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

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

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];
}
然后根据用户输入:

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

现场演示:

cat,dog
cat:dog
?@AmitJoki
cat:dog
。很抱歉,这是一个输入错误。嗯……我的目的是将这两个值分开,以便搜索“foo”将分别返回“foo”和“bar”。将
getPair(数组,“foo”)。拆分(“:”;
,然后分配[0]和[1]因为单独的变量太不合适了?我需要对这两个值都进行数学运算。@eric_Lagerren,类似于我的回答?没有拆分是一个完美的用途。更新。仍然在10%左右,所以我会在几年内远离函数类的东西。+1,因为我还不经常看到这一点。你不经常看到什么?即倒计时?这是w很有魅力。谢谢Amit Joki和@MartinKonecny你们都给了我一个很好的答案,回答了一个愚蠢的问题!@eric_Lagerren,很高兴能帮助你们,我也很高兴,这不是一个愚蠢的问题。注意getPair(数组,“f”)也会返回[“foo”,“bar”]。getPair(数组,“ample”)会返回[“baz”,“example”]刚刚注意到你的回答,抱歉。有没有理由一个对象比一个数组工作得更好?我是JavaScript新手,从这里我看到:一个数组更快。@eric_Lagerren在我的回答中,只要看看表达式来检索值,你就无法超越它!事实上它非常简单,但是一个对象不会给我第二部分吗“pair”?所以obj[“foo”]返回“bar”,因为至少在我的场景中,我需要这两个部分。@eric_Lagerren在性能方面,这个答案会比公认的答案更好。但是如果你看一下测试,你会发现我们谈论的是非常短的操作!因此在实践中没有显著差异。如果用户输入是“foo”,您已经有了第一部分,对吗:-)
if (obj1[user_input]) {return [user_input,obj1[user_input]];}
else if (obj2[user_input]) {return [obj2[user_input],user_input];}
else return undefined;