如何从javascript中的数组获取输出?

How to get an output from an array in javascript?

好的,所以我一直在学习 javascript,我知道最基本的东西,但我想知道如何根据另一个数组中的文本从一个数组中获取输出...

例如:

var input = ["hi", "welcome"];  
var output = ["hello", "thank you"];

因此,如果我要输入 "hi",我希望 return 与 "welcome" 和 "thank you" 相同 "hello"。

input[0] = output[0] 但我想搜索输入数组,然后获取输入的输出字符串。

可能是 for 语句?我一直在尝试寻找不同的方法,但可能有人知道如何做到这一点!

我很感激得到的任何帮助!

编辑:
澄清一下,如果有人使用过 IRC,那么我正在使用的就是它,所以我需要检查消息并将它们与输入数组或对象进行比较,然后将字符串输出到另一个数组或对象中的匹配键。

通过在循环中测试值,您将获得索引,您可以将其用于 return 输出数组中的相同位置。

function inOut(a1, val, a2){
  for(var i=0,l=a1.length; i<l; i++){
    if(a1[i] === val){
      return a2[i];
    }
  }
  return false;
}
console.log(inOut(input, 'hi', output)); // returns 'hello'

正如@FelixKling 所说,indexOf 会起作用。但是,您并不总是希望采用这样的方法,尤其是当您有大型数组时。原因是 indexOf 会遍历数组来找到匹配项,如果数组很大,可能需要一段时间。在"big O"中,运算是O(n).

通常,如果您想要查找,您应该使用 JavaScript 对象,这会给您带来 O(1) 的复杂性:

var outputForInput = {
  "hi": "hello",
  "welcome": "thank you"
};

var input = "hi";
var output = outputForInput[input];

有两种解决方案。

第一个是使用对象:

var obj = {"hi":"hello","welcome":"thank you"}

并通过以下方式访问数据:

obj["hi"]; //returns hello
obj["welcome"]; //returns thank you

您可以使用 Object.keys() 函数获取键数组。

要对数组做同样的事情,请使用本机 indexOf 函数。鉴于您的数组,代码将是:

output[input.indexOf("hi")] //returns hello

此方法的问题在于,如果数组中不存在查询字符串,indexOf returns -1。这将导致抛出错误,而 obj["nonexistantkey"] 只是 returns undefined.

function getResponse(inputStr){
    return output[input.indexOf(inputStr)];
}

或者如果您听从 Jacob 的建议(我推荐):

function getResponse(inputStr){
    return outputForInput[inputStr];
}

请注意,如果输入字符串不匹配,其中任何一个都将 return undefined