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

For loop not using argument from JavaScript function

本文关键字:函数 参数 JavaScript 循环 For      更新时间:2023-09-26

我想在我的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;
};

如果我这样称呼它:

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);

它将console日志"size",但它不会用formattedSize数组中的单词大小替换单词特征。下面是我在服务器控制台中得到的内容:

size
[ { characteristic: 's' },{ characteristic: 'm' },{ characteristic: 'l' } ]

我如何使它与数组内的大小替换特征?这是我想要的输出:

size
[ { size: 's' },{ size: 'm' },{ size: 'l' } ]

我希望能够重用具有其他特性的formatArr函数

您应该使用括号标记变量属性名:

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;
};

有点啰嗦,但仍然。如果你是在ES2015友好的环境中,你可以使用更短的语法:

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

试试这个:

function formatArr (targetArr, characteristic, formattedArr) {
    for (var i = 0; i < targetArr.length; i++) {
        var obj = {};
        obj[characteristic:targetArr] = targetArr[i]
        formattedArr.push(obj)
    };
    return formattedArr;
};

在非常新的JavaScript环境中,您可以这样写:

    formattedArr.push({ [characteristic]: targetArr[i] })

否则,您将不得不像@dfsq的答案那样一步一步地构建对象。