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

how to access from an string variable to object properties

本文关键字:访问 对象 属性 变量 字符串      更新时间:2023-09-26

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

但这是错误的,并抛出一个错误。。。有人能帮我吗?如果有人帮我,我将不胜感激。谢谢:)

var object = {
   music:{
      test:"",
      test2:""
   },
   video:{
      test:"",
      test2:""
   },
   pic:{
      test:"",
      test2:""
   },
   photosUsers:{
      test:"",
      test2:""
   }
}
var path = "music.test.test2";
var item = object.path

这里有一些问题。

首先,对象属性是字符串,但不能只使用点分隔路径来访问这样的嵌套结构。至少不是天生的。但也有这样的图书馆。例如,我是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]会得到一个无论path变量的值是多少都命名的属性。

第三,object.music.test.test2不存在于您提供的数据结构中。使用console.log()了解这一点。

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

在您的示例中,object.music.test是一个字符串。由于字符串没有名为test2的属性,尝试访问它将返回undefined

试试这个:

var path_array = path.split('.');
var item = object;
for (int i = 0; i < path_array.length; i++) {
    item = item[path_array[i]];
}
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;