使用字符串来定位对象

发布于 2024-10-02 23:29:09 字数 1251 浏览 2 评论 0原文

我对 javascript 比较陌生。我正在使用appcelerator的titanium 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);

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

I'm relatively new to javascript. I'm using appcelerator's titanium SDK to create a mobile app though, and it uses only javascript.

Anyways, I have a hierarchy menu system that I'm creating. I have data arrays filled with submenu items. Each data array is filled with a different submenu. When I click on a menu item, it receives a variable that lets the application know which data array to load next. Here is a basic example:

 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);
    }

There are many more menus (1,2,3,4,etc and 1_1,1_2,1_3,2_1,2_2, etc), so the method above of setting the data is extremely inefficient. What I'd like to so is something like this:

tableview.setData(data + win.subID);

However, I know that data is an array object and subID is a string. How can I combine an object's name with a string, then convert it to refer to an object again?

Thanks, and please let me know if anything above was unclear. I've been struggling with this for a really long time.

EDIT:

Here's what I need in other word's:

I have a string, which I want to use to reference an array.

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

What I need is that magical string to array/object function.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

·深蓝 2024-10-09 23:29:09

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

在浏览器环境中,全局对象是window。使用全局变量或者调用全局函数实际上就是访问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 的已知网络浏览器。不知道钛合金是否可以做到这一点。

I don't know titanium enough to answer this directly but here's a hint. What's the global object in titanium? You know, if you declare a global variable, what object does that variable belong to?

In a browser environment, the global object is window. Using a global variable or calling a global function is actually accessing properties and calling methods of the window object. So, in a web browser:

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

and

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

So in your case, if this were a regular web browser, your code would be:

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

Not all javascript implementations work this way though, this works on all known web browsers with javascript support. Don't know if you can do this in titanium.

酷遇一生 2024-10-09 23:29:09

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

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

I think what you want is an array of arrays so you can do this...

tableView.setData(data[win.subID]);
淡水深流 2024-10-09 23:29:09

可能有一种更优雅的方法来做到这一点,但我累了:]
但是你可以使用哈希表作为解决方案

Javascript 哈希表

var myArray = new Array();
myArray['data1_1'] = data1_1;
myArray['data1'] = data1;
myArray['data'] = data;

var thestring='data1';
tableview.setData(myArray[thestring]);

类似的东西可能会成功。

There is probably a more elegant way of doing this but I'm tired :]
But you could use hash tables as a solution

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]);

Something like that may do the trick.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文