如何从字符串变量访问对象属性

时间:2016-05-06 18:57:33

标签: javascript object

hiiii我正在创建一个应用程序, 我从url获取一个访问对象属性的路径,路径是字符串,我保存在变量中, 我的意思是这个代码,例如:

但它错了并抛出错误......任何身体都可以帮助我吗? 如果有人帮助我,我真的很感激。谢谢:))

var object = {
   music:{
      test:"",
      test2:""
   },
   video:{
      test:"",
      test2:""
   },
   pic:{
      test:"",
      test2:""
   },
   photosUsers:{
      test:"",
      test2:""
   }
}

var path = "music.test.test2";
var item = object.path

3 个答案:

答案 0 :(得分:2)

这里有一些问题。

首先,对象属性是字符串,但是你不能只使用点分隔的路径来访问这样的嵌套结构。至少不是原生的。但是有这个库。例如,我是dangit的作者,其namespace()函数可以帮助您完成此操作。

var item = dangit.namespace(object, 'music.test.test2');

其次,即使JavaScript支持这样的路径表示法,它也可能像这样工作。

var path = 'music.test.test2';
var item = object[path];

那是因为object.pathobject[path]是非常不同的事情,并且存在重要的差异。即使你有一个path变量,object.path也不会使用它,因为你要求的是一个名为path的属性,而object[path]会获得一个名为{1}}的属性。 path变量是。

第三,您提供的数据结构中不存在object.music.test.test2。使用console.log()了解相关信息。

console.log('music:', object.music);
console.log('music.test:', object.music.test);

在您的示例中,object.music.testString。由于字符串不具有名为test2的属性,因此尝试访问它将返回undefined

答案 1 :(得分:1)

试试这个:

var path_array = path.split('.');
var item = object;
for (int i = 0; i < path_array.length; i++) {
    item = item[path_array[i]];
}

答案 2 :(得分:0)

var object = {music : {test : "" , test2 : ""},video : {test : "" , test2 : ""},pic: {test : "" , test2 : ""},photosUsers: {test : "" , test2 : ""}}

//Associate the path variable to the object
object.path = "music.test.test2";
var item = object.path;