编辑:不要这样做。这是一种愚蠢的做事方式,当我刚接触编程
时,我做了一些尝试我有一个数组中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
但是它给了我所有数组中的值,这是我不想要的。我只想要一个用户输入的特定值。虽然我可以使用索引号选择数组的一个特定部分,但我无法弄清楚如何使其动态化(例如根据用户输入的内容进行更改)。
甚至可以这样做吗?如果没有,最好的方法是什么?
感谢。
答案 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;