如何做到这一点,而不使用eval
对不起,标题,但我不知道如何解释。
该函数采用URI,例如:/ foo / bar / 1293。 如果存在的话,该对象将存储在类似于{foo:{bar:{1293:'content …'}}}的对象中。 该函数迭代URI中的目录,并检查path是否未定义,同时用随后使用eval()调用的代码构build一个string。 包含代码的string看起来像delete memory [“foo”] [“bar”] [“1293”]
有没有其他办法可以完成这个? 也许将保存的内容存储在一个普通的对象以外的东西?
remove : function(uri) { if(uri == '/') { this.flush(); return true; } else { var parts = trimSlashes(uri).split('/'), memRef = memory, found = true, evalCode = 'delete memory'; parts.forEach(function(dir, i) { if( memRef[dir] !== undefined ) { memRef = memRef[dir]; evalCode += '["'+dir+'"]'; } else { found = false; return false; } if(i == (parts.length - 1)) { try { eval( evalCode ); } catch(e) { console.log(e); found = false; } } }); return found; } }
这里不需要评估。 只要像你一样向下钻取,并在最后删除属性:
parts.forEach(function(dir, i) { if( memRef[dir] !== undefined ) { if(i == (parts.length - 1)) { // delete it on the last iteration delete memRef[dir]; } else { // drill down memRef = memRef[dir]; } } else { found = false; return false; } });
你只需要一个帮助函数,它需要一个Array
和一个对象,并执行:
function delete_helper(obj, path) { for(var i = 0, l=path.length-1; i<l; i++) { obj = obj[path[i]]; } delete obj[path.length-1]; }
而不是build立一个代码string,将名称追加到一个Array
,然后调用这个而不是eval
。 这段代码假设检查path是否存在已经完成了,因为它们在那个用法中。
- 在Node.js中的单个HTTP请求中调用多个HTTP请求
- 带有soundcloud模块的节点
- 一个被分叉的child_process是否可以作为父项,并且也可以分叉新进程?
- Ember – 自定义计算属性检查是否所有依赖字段存在
- “TypeError:this._subscribe不是函数”在简单的Node模块中尝试RxJS时
- 如何使用JavaScript / Node.js创build图像?
- 如何将新创build的节点模块保存到我的package.json中?
- 竖琴js +博客例如:有没有一种方法来设置文章的默认部分?
- bcrypt不能用npm安装(Mac OS X 10.9 – Node v0.10.22)