我有一个对象:
var obj= {
hello:{
it:"ciao",
en:"hello"
}
}
现在的问题是,我无法通过obj.hello[lang]
访问某个值,obj.hello.en
也无法访问。
我有字符串,例如' hello.it'或者' hello.en'我希望得到像obj [myString]这样的东西,成为obj.hello.en
我尝试用.split('.')
分割字符串,但我必须通过长度结果进行硬编码
我怎样才能实现这个目标?
答案 0 :(得分:3)
我不明白...... obj.hello.it应该工作
var obj= {
hello:{
it:"ciao",
en:"hello"
}
}
console.log(obj.hello.it);
如果您需要从字符串'hello.it'获取此值,我会做类似的事情:
var obj= {
hello:{
it:"ciao",
en:"hello"
}
}
var helloIt = 'hello.it';
var helloEn = 'hello.en';
function translate(s){
var values = s.split('.');
var resource = values[0];
var lang = values[1];
return obj[resource][lang];
}
console.log(translate(helloIt));
console.log(translate(helloEn));
之后你必须管理一些案例(如果字符串的格式不正确,如果翻译不存在......)。你可以管理翻译模块中的所有内容......希望它有所帮助;)
编辑:
如果您想要使用字符串“探索”对象,可以执行以下操作:
var obj= {
hello:{
it:"ciao",
en:"hello"
}
};
function explore(o, s){
return s.split('.').reduce(function(r, ss){
return r && r[ss] ? r[ss] : null;
}, o);
}
console.log(explore(obj, 'hello.it'))
答案 1 :(得分:0)
如果您的字符串类似于'hello.it',那么您可以做到这一点,希望它有所帮助
var obj= {
hello:{
it:"ciao",
en:"hello"
}
};
var str = 'hello.it';
alert(obj[t.split('.')[0]][t.split('.')[1]]);
答案 2 :(得分:0)
以下是展示如何走下一个物体的示例:
var obj= {
hello:{
it:"ciao",
en:"hello"
}
}
var path='hello.it'.split('.');
x=obj;
for (var i=0;i<path.length;i++)
{
x=x[path[i]];
console.log(x);
}
编辑要修改该值,您可以使用相同的样式,但您需要知道何时使用该字符串。这实际上取决于您的要求和您的实际对象模型,但这是一个示例
for (var i=0;i<path.length;i++)
{
a=x[path[i]];
if(typeof(a)=='string')
{
x[path[i]]='NewString'
console.log(x[path[i]]);
break;
}
x=a
console.log(x);
}
答案 3 :(得分:0)
这应该有效:
var obj= {
hello:{
it: "ciao",
en: "hello"
}
};
var input = "hello.it"; //change this to the value you wish to get.
var str = "obj".concat(".").concat(input);
console.log(eval(str));
答案 4 :(得分:0)
您可以拆分路径并迭代它并减少您拥有的对象。此提案使用缺少属性的默认值。
var obj= { hello: { it: "ciao", en: "hello" } },
path ='hello.it',
value = path.split('.').reduce(function (o, k) {
return (o || {})[k];
}, obj);
console.log(value);
&#13;
答案 5 :(得分:0)
试试这个,它适用于你想要的任何级别。
var obj= {
hello:{
it:"ciao",
en:"hello"
}
}
var lang='hello.it';
var val=obj;
lang.split('.').forEach(function(c){val=val[c]});
console.log(val);//Should output ciao
&#13;
答案 6 :(得分:0)
Personaly,我不知道你为什么不使用eval
。
var str = "hello.it";
eval("obj." + str);
如果str是硬编码的,那么瘦eval是最好的。
我认为你可以参考this。