什么
link: 'tree.options[0].options[0]'然后
eval(path.to.link)?
以下样品仅使用Chrome进行测试。所有同一个树:
var tree = { level1: [{ key: 'value' }] };
没有
eval
function resolve(root, link) { return (new Function('root', 'return root.' + link + ';'))(root);}var value = resolve(tree, path.to.link);
退回至
window
function resolve(root, link) { return (new Function( 'root', 'return root.' + (link || root) + ';' ))(link ? root : window);}resolve(tree, 'level1[0].key'); // "value"resolve('tree.level1[0].key'); // "value"
捕捉错误
try / catch块可防止断开的链接引发错误。
function resolve(root, path) { try { return (new Function('root', 'return root.' + path + ';'))(root); } catch (e) {}}resolve(tree, 'level1[0].key'); // "value"resolve(tree, 'level1[1].key'); // undefined
使用自定义路径格式
这里的好处是我们可以将对象或数组作为传递
root。还要注意,我们可以用
path.split('/')我们选择的任何字符替换斜杠。
function resolve(root, path) { path = '["' + path.split('/').join('"]["') + '"]'; return (new Function('root', 'return root' + path + ';'))(root);}resolve(tree.level1, '0/key'); // "value"resolve(tree, 'level1/0/key'); // "value"resolve(tree, 'level1/0'); // Object {key: "value"}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)