如何从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
。
好的,所以我一直在学习 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
。