我正在试验数据的深层对象树,现在我想要我的代码分解。
很多时候我必须检查是否存在整个分支来设置或取消设置一个值。我使用了很多“if else”条件,我正在考虑为此使用函数。
例如,要在分支中将值设置为 false,我可以有两种解决方案,例如:
function setFalse(root, /* [names]* */) { ...
// If root exists, call setFalse() with the rest of arguments.
// Else if I only have two arguments : root[arguments[1]] = false ;
// Else return.
... }
或使用 try-catch :
function setFalse(root, /* [names]* */) {
try {
var l = arguments.length,
branch = root ;
for (var i=1 ; i<l-1 ; i++) // Not taking the last argument.
branch = branch[arguments[i]] ;
branch[arguments[l-1]] = false ; // With last argument.
}
catch(e) {}
}
第一种方法比第二种方法更干净,但它使用递归,所以它可能很重。第二种方法有点脏(我认为)但是执行起来可能更轻?
我必须准确地说我不在乎整个分支是否存在,我只想让它在它存在时设置为假。
通常我有 4 分支深的对象,但它可能更多。你认为哪种方法最有效?