2015-10-16 23 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