【问题标题】:Using a string to target an object使用字符串来定位对象
【发布时间】:2010-11-14 19:52:21
【问题描述】:

我对 javascript 比较陌生。不过,我正在使用 appcelerator 的 Titan SDK 来创建移动应用程序,并且它只使用 javascript。

无论如何,我正在创建一个层次结构菜单系统。我有填充子菜单项的数据数组。每个数据数组都填充有不同的子菜单。当我单击一个菜单项时,它会收到一个变量,让应用程序知道接下来要加载哪个数据数组。这是一个基本示例:

 var data = [
    {title:'Item 1',subID:'1', hasDetail:true,},
    {title:'Item 2',subID:'1', hasDetail:true,}
 ];

 var data1 = [
  {title:'Child1',subID:'1_1', hasDetail:true},
  {title:'Child2', subID:'1_2', hasDetail: true}
 ];

 var data1_1 = [
   {title:'Grandchild1'},
   {title:'Grandchild2'}
  ];

    // I have a ton of menu items though, so the method I'm using 
    // below is very inefficient:
    if(win.subID == '1'){
       tableview.setData(data1);
    } else if(win.subID == '2'){
       tableview.setData(data2);
    }

菜单比较多(1,2,3,4等和1_1,1_2,1_3,2_1,2_2等),所以上述设置数据的方法效率极低。我想要的是这样的:

tableview.setData(data + win.subID);

但是,我知道 data 是一个数组对象,而 subID 是一个字符串。如何将对象的名称与字符串组合,然后将其转换为再次引用对象?

谢谢,如果上面有任何不清楚的地方,请告诉我。我已经为此苦苦挣扎了很长时间。

编辑:

换句话说,这就是我需要的:

我有一个字符串,我想用它来引用一个数组。

data1 = [
   {value: 1},
   {value: 2}
]
var string = 'data1';
magicStringToArrayFunction(string);
tableview.setData(string);

我需要的是数组/对象函数的神奇字符串。

【问题讨论】:

    标签: javascript string object titanium appcelerator


    【解决方案1】:

    我对钛的了解不足以直接回答这个问题,但这里有一个提示。钛的全局对象是什么?你知道,如果你声明一个全局变量,那个变量属于什么对象?

    在浏览器环境中,全局对象是window。使用全局变量或者调用全局函数,实际上就是访问窗口对象的属性和调用方法。因此,在网络浏览器中:

    setTimeout(foo, 10)
    // is the same as:
    window.setTimeout(foo, 10)
    // is the same as:
    window['setTimeout'](foo,10)
    

    x = 5
    // is the same as:
    window.x = 5
    // is the same as:
    window['x'] = 5
    

    所以在你的情况下,如果这是一个普通的网络浏览器,你的代码是:

    var string = 'data1';
    tableview.setData(window[string]);
    

    虽然不是所有的 javascript 实现都以这种方式工作,但它适用于所有已知的支持 javascript 的 Web 浏览器。不知道钛能不能做到这一点。

    【讨论】:

      【解决方案2】:

      我认为你想要的是一个数组数组,所以你可以这样做......

      tableView.setData(data[win.subID]);
      

      【讨论】:

      • 如果每个数据集都是更大数组的一部分,这将起作用。但是,每个数组完全是一​​个单独的数组,称为 data1、data2、data1_1 等。我有一个字符串,其中包含我需要显示的数组的编号,但我不知道如何使用该字符串来实际定位该数组.
      • 我用另一个例子编辑了我的原始帖子。希望这可以解决问题。
      【解决方案3】:

      可能有更优雅的方式来做这件事,但我累了:] 但是您可以使用哈希表作为解决方案

      Javascript hash tables

      var myArray = new Array();
      myArray['data1_1'] = data1_1;
      myArray['data1'] = data1;
      myArray['data'] = data;
      
      var thestring='data1';
      tableview.setData(myArray[thestring]);
      

      这样的事情可能会奏效。

      【讨论】:

        猜你喜欢
        • 2012-07-05
        • 1970-01-01
        • 1970-01-01
        • 2017-09-03
        • 2017-12-12
        • 2022-12-19
        • 2013-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多