2015-10-16 79 views
0

我想在我的server.js文件中运行该功能:For循环不使用参数从JavaScript函数

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

它控制台日志“大小”,但它不会用formattedSize数组中的字大小替换单词特征。这是我在我的服务器控制台中得到的:

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

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

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

我想能够重用formatArr函数与其他特性。

回答

5

您应该使用bracket notation变量属性名称:

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]}); 
}; 
+0

我们在同一时间发布了几乎相同的答案我会给你+1思想的伟大思想,但我今天刚刚投票! =] – AtheistP3ace

+1

@ AtheistP3ace是的,我们的答案是正确的:) – dfsq

2

试试这个:

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

在非常新的JavaScript的环境中,你可以写:

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

否则,必须按照@ dfsq的回答一步步构建一个对象。

+2

这很酷。我不知道!谢谢。每天学些新东西。 – AtheistP3ace