Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.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中将数组的值转换为另一个变量的递归字段名_Javascript_Arrays_Node.js - Fatal编程技术网

如何在Javascript中将数组的值转换为另一个变量的递归字段名

如何在Javascript中将数组的值转换为另一个变量的递归字段名,javascript,arrays,node.js,Javascript,Arrays,Node.js,我需要在Javascript中将一个数组变量的值转换为另一个变量的字段 我的变量是 field = ["entries", "body"] 它需要变得像这样 req.body.entries.body field.forEach(function(prop){ req.body[prop] = "..."; } 我试着做一些类似的事情 req.body.entries.body field.forEach(function(prop){ req.body[prop] = ".

我需要在Javascript中将一个数组变量的值转换为另一个变量的字段

我的变量是

field = ["entries", "body"]
它需要变得像这样

req.body.entries.body
field.forEach(function(prop){
   req.body[prop] = "...";
}
我试着做一些类似的事情

req.body.entries.body
field.forEach(function(prop){
   req.body[prop] = "...";
}
但这仅适用于req.body.entries和req.body.body。我需要它一直到req.body.entries.body

我这样做是为了从文档字段(名为entries[body])中的表单获取数据,对该数据进行一些清理,然后将其传递回node.js,就像最初发出的请求一样

更新

我需要做的就是基本上

exports.sanitize = function(field){

    // field = ["entry","body"];

    return function(req, res, next){
        val = getField(req, field); // val = "Some string with data"
        val = some_process(val); // some_process is a function that cleans up the string

        req.body.entry.body = val; // HOW TO TAKE entry.body from the field array???

        next();
    }
};
正如您所看到的,我所需要的不是硬编码entry.body,而是从传递字段名称以进行处理的字段数组值中获取它

如果你能想出一个更优雅的解决方案,请告诉我

谢谢

你想要什么

var obj = req.body;
for (var i=0; i<fields.length-1; i++)
    obj = obj[fields[i]];
var prop = fields[i];

obj[prop] = cleanUp(obj[prop]);
var obj=req.body;

对于(var i=0;i而言,仅当已经定义了req.body.entries.body时,此选项才有效:

field = ["entries","body"];

var toeval="req.body";
field.forEach(function(prop){
       toeval+="."+prop;
});
toeval+="=\"...\"";
eval(toeval);
这项工作:

var fields = [ "field1", "field2", "field3", "field4" ];
var obj = req.body;
fields.forEach(function(prop) {
    obj[prop] = {};
    obj = obj[prop];
});

我可以使用递归来完成这项工作。希望这有帮助

var foo = {
    bar: {}
};

var fields = ['foobar', 'barfoo'];

function setVar (currentVar, arr, counter) {
    if (arr[counter] === undefined) {
        return;
    }

    currentVar[arr[counter]] = {};
    setVar(currentVar[arr[counter]], arr, counter + 1);
}

setVar(foo.bar, fields, 0);

那么
req.body[field[0]][field[1]]=“…”呢
?在检查重复项列表时,它是否
需要变成类似于
需要变成
?是否
字段
是动态的?我希望参数的清理具有相当静态的名称,以便可以直接使用
req.body.entried.body
…是否
req.body.entries.body
已定义?@Andy:“对数据进行一些清理”谢谢@CleanerCoder,但我需要实际更改变量本身的名称,而不是获取它的数据,更改它,然后将其作为另一个变量传递。@deemeetree您可以通过不复制示例中的主体来使示例更清楚吗?好的,所以基本上我有一个全局req.body变量,其中包含表单中的所有数据。我想一个特殊函数,可以处理该变量中的任何字段,例如req.body.entry.text或req.body.entry.title,获取该字段,对其进行一些处理,然后将其返回到同一个变量,类似于插入转换后的数组值。我是否要将其重写得更清楚一点,或者这是可以理解的?这是您要告诉我的吗an:req.body.entry.title=do_处理(req.body.entry.title)基本上是的,但这里的问题是entry.title只是其中一个实例。例如,同样的函数也应该可以用于req.body.entry.text。他们不是说eval是邪恶的,尤其是在处理用户输入时?我仍然对eval感到疑惑。作为JavaScript的初学者,我想知道你的意见:)谢谢!我一定要试一试。只需考虑eval,因为它将“eval”作为Javascript传递的字符串。因此,如果您传递用户输入数据,可能会有人传递将要执行的“邪恶”内容。请这样想:谁定义了您的“字段”数组?您将在“some_process”函数中执行什么操作?