for循环不使用JavaScript函数的参数

Ama*_*nda 0 javascript parameters arguments for-loop function

我正在尝试在server.js文件中运行此函数:

function formatArr (targetArr, characteristic, formattedArr) {
    console.log(characteristic);
    for (var i = 0; i < targetArr.length; i++) {
        formattedArr.push({characteristic:targetArr[i]})
    };
    return formattedArr;
};
Run Code Online (Sandbox Code Playgroud)

如果我这样称呼它:

var targetSize = Object.keys(JSON.parse(req.query.size)); //[s,m,l]
var sizeKey = "size";
// format size array for mongodb query 
var formattedSize = [];
var formattedSize = formatArr(targetSize, sizeKey, formattedSize);
console.log(formattedSize);
Run Code Online (Sandbox Code Playgroud)

它是控制台日志"大小",但它不会用formattedSize数组中的字大小替换字特征.这是我在服务器控制台中获得的内容:

size
[ { characteristic: 's' },{ characteristic: 'm' },{ characteristic: 'l' } ]
Run Code Online (Sandbox Code Playgroud)

如何在阵列中使用大小替换特征?这是我想要的输出:

size
[ { size: 's' },{ size: 'm' },{ size: 'l' } ]
Run Code Online (Sandbox Code Playgroud)

我希望能够重用formatArr函数和其他特性.

dfs*_*fsq 5

您应该为可变属性名称使用括号表示法:

function formatArr (targetArr, characteristic, formattedArr) {
    console.log(characteristic);
    for (var i = 0; i < targetArr.length; i++) {
        var obj = {};
        obj[characteristic] = targetArr[i];
        formattedArr.push(obj);
    };
    return formattedArr;
};
Run Code Online (Sandbox Code Playgroud)

有点冗长,但仍然.如果您处于ES2015友好环境中,则可以使用较短的语法:

for (var i = 0; i < targetArr.length; i++) {
    formattedArr.push({[characteristic]: targetArr[i]});
};
Run Code Online (Sandbox Code Playgroud)