我有一个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
中。