来自字符串路径的Javascript对象值

时间:2016-10-19 13:53:43

标签: javascript arrays object key

我有一个对象:

var obj= {
      hello:{
         it:"ciao",
         en:"hello"
      }
}

现在的问题是,我无法通过obj.hello[lang]访问某个值,obj.hello.en也无法访问。

我有字符串,例如' hello.it'或者' hello.en'我希望得到像obj [myString]这样的东西,成为obj.hello.en

我尝试用.split('.')分割字符串,但我必须通过长度结果进行硬编码

我怎样才能实现这个目标?

7 个答案:

答案 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)

您可以拆分路径并迭代它并减少您拥有的对象。此提案使用缺少属性的默认值。

&#13;
&#13;
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;
&#13;
&#13;

答案 5 :(得分:0)

试试这个,它适用于你想要的任何级别。

&#13;
&#13;
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;
&#13;
&#13;

答案 6 :(得分:0)

Personaly,我不知道你为什么不使用eval

var str = "hello.it";
eval("obj." + str);

如果str是硬编码的,那么瘦eval是最好的。

我认为你可以参考this