Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不使用eval的情况下实现这一点_Javascript_Node.js - Fatal编程技术网

Javascript 如何在不使用eval的情况下实现这一点

Javascript 如何在不使用eval的情况下实现这一点,javascript,node.js,Javascript,Node.js,对不起,这个标题我不知道怎么解释 该函数采用URI,例如:/foo/bar/1293。如果对象存在,它将存储在一个类似{foo:{bar:{1293:'content…'}}的对象中。该函数遍历URI中的目录,检查路径是否未定义,同时使用稍后使用eval()调用的代码构建一个字符串。包含代码的字符串类似于delete memory[“foo”][“bar”][“1293”] 我还有别的方法可以做到这一点吗?可能将保存的内容存储在其他内容中,而不是 普通物品 remove : function(u

对不起,这个标题我不知道怎么解释

该函数采用URI,例如:/foo/bar/1293。如果对象存在,它将存储在一个类似{foo:{bar:{1293:'content…'}}的对象中。该函数遍历URI中的目录,检查路径是否未定义,同时使用稍后使用eval()调用的代码构建一个字符串。包含代码的字符串类似于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;
    }
});

您只需要一个helper函数,它接受一个
数组和一个对象,并执行以下操作:

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];
}
function delete\u helper(对象,路径){

对于(var i=0,l=path.length-1;iyes),它可以工作,但我更希望在同一次迭代中验证路径和删除对象。