我有一个javascript数组,它定义了这样的无限树。

z=['~GROUPHEAD 0~',
    'Intro',
    'Summary',
    ['~GROUPHEAD 1~',
        'Do this',
        ['~GROUPHEAD 2~',
            'Task 1',
            'Task 2'
        ]
    ]
]


现在
z[0]='~GROUPHEAD 0~';
z[1]='Intro';
z[2]='Summary';
z[3][0]='~GROUPHEAD 1~';
z[3][1]='Do this';
z[3][2][0]='~GROUPHEAD 2~';
z[3][2][1]='Task 1';
z[3][2][2]='Task 2';
z...[0] is a Header

问题

我想发送一个数字,说322 or 3.2.2 or [3][2][2]选择“任务2”(即z[3][2][2]
谁能帮忙;还有没有更好的方法可以做到这一点?

编辑

我需要称它为一百次

最佳答案

您可以拆分数字并递归查找:

var path = '3.2.2',
    root = z;

var item = (function walk( root, path ){
    root = root[ path.shift() ];
    return path.length ? walk( root, path ) : root;
})( root, path.split('.') );


或者,您可以执行以下操作:

var path = '3.2.2'
  , item = eval('z[' + path.replace(/[^\d\.]/g, '').split('.').join('][') + ']');


上面的行:


通过删除非数字/小数对字符串进行消毒
构造一个字符串“ z [3] [2] [2]”
评估此新字符串可直接为您提供结果。


如果有人通过无效路径,则应将其包装在try/catch中。

10-05 21:07