2014-11-05 285 views
0

我相當難以看到一個看似簡單的問題。我目前有一個包含多個對象的對象。我試圖動態地將對象(不管數字)作爲單獨的參數傳遞給一個函數。我不想手動調用該函數,因爲對象的數量可能因使用情況而異。將對象內的對象作爲參數傳遞給函數

我在這裏已經包括了代碼示例(我試圖簡化可讀性):http://jsfiddle.net/z8mtc8jk/1/

另外,代碼如下:

var objectofObjects = {}; 
objectofObjects.obj1 = {key:"lol"}, 
objectofObjects.obj2 = {key:"rofl"}, 
objectofObjects.obj3 = {key:"lmao"}; 

console.log(objectofObjects); 
console.log(Object.keys(objectofObjects).length + " is the number of objects inside the object"); 

function multipleArguments(arg1, arg2, arg3) { 
    console.log(Object.keys(objectofObjects)); 
} 

//how can I add the objects within the objectofObjects as arguments to this function, 
//without gaving to call it like this... 

multipleArguments(objectofObjects.obj1, objectofObjects.obj2, objectofObjects.obj3); 

任何幫助深表感謝。

在此先感謝!

回答

1
multipleArguments.apply(this,Object.keys(objectofObjects).map(function(key){return objectofObjects[key]})) 
+1

很多答案適用於這個場景,但我真的很喜歡這個解決方案。避免創建額外的東西(數組)並完成工作的需要。感謝你! – richie 2014-11-05 21:53:09

1

傳遞對象的對象...

multipleArguments(objectofObjects); 

和你的函數,處理它裏面的對象。

function multipleArguments(objcs) { 
    for (var o in objcs){ 
     // do your stuff here 
    } 
} 
+0

當使用'in'運算符時,應該使用'objcs.hasOwnProperty(o)'確保鍵是對象本身的成員,以避免遍歷可枚舉的原型屬性。還要注意'o'只是*鍵*而不是數值。 – 2014-11-05 03:43:58

0

如果需要的對象accessable作爲另一對象的成員需要通過遍歷其鍵來構建包含所述對象的數組。像這樣:

var args = [], keys = Object.keys(objectofObjects), i; 
for (i = 0; i < keys.length; i++) 
    args.push(objectofObjects[keys[i]]); 

yourFunction.apply(window, args); 

否則只是將它們存儲在一個數組,所以你必須arrayOfObjects並直接使用此爲apply電話。

0

我想我會把這些對象放在一個數組中,然後用這個對象數組的每個索引作爲該函數的一個參數調用該函數。

for(int i = 0; i < objectsArray.length; i++) { 
    myFunction(objectsArray[i]); 
}