Javascript JS使用单个字符串作为多维数组的键

Javascript JS使用单个字符串作为多维数组的键,javascript,Javascript,假设我有一个变量: var myvar = { welcome: "Welcome!", thx: "Thank you!", ... } function myFunction(key){ return myvar[key] } 然后,我有一个函数,它被发送一个字符串并从该变量返回值: var myvar = { welcome: "Welcome!", thx: "Tha

假设我有一个变量:

var myvar = {
    welcome: "Welcome!",
    thx: "Thank you!",
    ...
}
function myFunction(key){
    return myvar[key]
}
然后,我有一个函数,它被发送一个字符串并从该变量返回值:

var myvar = {
    welcome: "Welcome!",
    thx: "Thank you!",
    ...
}
function myFunction(key){
    return myvar[key]
}
所以发生了这样的情况:

console.log(myFunction('welcome')) ///prints Welcome!
这一切都很好,工作得很好,但是如果我想在原始变量中添加月份之类的内容,我想这样做呢

var myvar={
    .
    .
    months: [
        ["jan", "January"],
        ..
}
所以如果我想打电话,比如说,一月,我会打

myvar[months][0][1] //Select the months part, 0 means it's january, 1 means its fully written not just "jan"
例如,我可以在我的密钥中执行类似于
months-0-1
split
的操作,以获得所有3个密钥;但是,我如何调整我的原始功能,使其既适用于原始内容(欢迎使用,thx),又适用于几个月

这个问题的第二部分,我是否应该这样做,或者这是一个不太理想的解决方案,我是否应该像前面的方法一样,将每个条目添加到变量中? 注:我仍然想要我的第一个问题的答案,如果没有别的,因为我想知道如何才能做到这一点,即使我最终没有做到


关于用例的更多信息,我在html中的一些对象上有一个data translate标记,一些是动态生成的,这些变量用于语言翻译,它们在生成或语言更改时都调用该函数。(data translate=“welcome”)例如

您可以将功能代码更新为如下所示,并将键作为您提到的分隔值传递。如果您不熟悉本文,请参阅本文

return key.split('-').reduce((a, i) => a[i], myvar);
在下面试试

var myvar={
欢迎:“欢迎!”,
thx:“谢谢!”,
月份:[
[“一月”、“一月”]
]
};
函数myFunction(键){
return key.split('-').reduce((a,i)=>a[i],myvar);
}
console.log(myFunction('welcome'));//欢迎光临!

console.log(myFunction('months-0-1'));//一月我们可以这样做

var myvar={
    .
    .
    months: [
        ["jan", "January"],
        ..
}
var myvar={
欢迎:“欢迎!”,
thx:“谢谢!”,
月份:[
[“一月”、“一月”]]
};
函数myFunction(键){
让keys=key.split(“-”);
设len=keys.length;
设结果=myvar,i=0;
而(我log(myFunction(“欢迎”),myFunction(“months-0-0”)
welcome@SDDave to StackOverflow!你没想过在一个系统中使用更多的功能吗?您对需要开发的内容有特殊限制吗?谢谢!我不介意使用更多的函数;限制条件是,我需要尽可能少的代码,同时能够在每个页面中使用它,因为我正在将此脚本导入每个(好的,大多数)页面。每次生成新的可翻译元素时,我都调用translateText函数。每次用户切换语言时,我也会调用translateAll函数(它所做的只是循环遍历所有可翻译项并调用translateText)。这些变量是它们自己的自隔离文件,便于编辑,因此我不想为每种语言创建多个变量,除非我必须这样做。