2010-09-14 25 views
1

我有一個JavaScript對象,我想添加一些屬性,但我不知道屬性的名稱是什麼,直到運行時。JavaScript對象 - 添加屬性而不使用eval?

我可以不使用eval來做到這一點嗎?如果是這樣,怎麼樣?

var get_params = new Object(); 
var params = {'name':'john', 'age':'23'}; //actually not known until runtime 
for (var i=0, len=params.length; i<len; ++i){             
     get_params.p[0] = p[1]; //How can I set p[0] as the object property? 
    } 
} 
+2

我相信你輸入得太快了,但是對象的語法是{},而不是[]。 :) – einarmagnus 2010-09-14 08:06:32

+0

很難說出你以後的結果。牛頭人對你期望的結果做了猜測,似乎是有道理的,但是,「params」是一個對象似乎更合理,然後結果與你開始的結果完全一樣!你真的應該詳細說明你想要的答案。 'p [1]'是什麼意思? 'p'不存在於你的代碼中... – 2010-09-14 08:27:12

+0

for循環讓我覺得他確實需要一個數組,而不是一個對象。否則,他應該使用'for(var i in params)'。 – Tauren 2010-09-14 08:27:17

回答

1

由於你的代碼示例有一個格式不正確的數組,我將包含2個變體。

變形例1(params爲一個實際的對象,而不是一個數組):

var get_params = {}; // prefer literal over Object constructors. 

var params = {'name':'john', 'age':'23'}; // @runtime (as object literal) 

for (var key in params){ 
    if(params.hasOwnProperty(key)) { // so we dont copy native props 
     get_params[key] = params[key]; 
    } 
} 

變形例2(參數是包含對象的數組):

var get_params = {}; // prefer literal over Object constructors. 

var params = [{'name':'john'},{'age':'23'}]; // @runtime (as array literal) 

for(var i=0,param;param=params[i];i++) { 
    for (var key in param){ 
     if(param.hasOwnProperty(key)) { 
      get_params[key] = param[key]; 
     } 
    } 
} 

享受。

+0

因此,第一個解決方案基本上讓你和params一樣。有什麼意義,爲什麼不使用params本身的價值呢?第二種解決方案**顯示**可以正常工作,但實際上當i = 2時,會引用數組中未定義的元素。這個解決方案依賴於javascript將你踢出for循環,因爲你試圖引用params [2],它是一個不存在的元素。正如我所說,它有效,但它不是我想要這樣做的方式。 – Tauren 2010-09-14 17:03:43

0
var get_params = {}; 
var params = [{'name':'john'}, {'age':'23'}]; 
for (var i=0,len=params.length; i<len; ++i){ 
    for (var p in params[i]) { 
     if(params[i].hasOwnProperty(p)) { 
     get_params[p] = params[i][p]; 
     } 
    } 
} 

好吧,這是我的第三個版本。我認爲它會做我理解你的願望。然而有些令人費解,並且可能爲您的動態數組提供了更好的格式。如果我明白你想要做的正確,這應該工作。基本上它會創建以下對象:

get_params = { 
    name: "john", 
    age: "23" 
} 
+0

這也不起作用。這裏'p'是一個對象 - 例如'{'name':'john'}' - 並且'p [0]'不存在。我很確定OP的意思是參數是'{'name':'john','age':'23'}',在這種情況下,您的原始解決方案更接近但不正確。這只是我猜測,但無論如何,這是行不通的。結果將是'get_params = {undefined:undefined}' – 2010-09-14 08:10:07

+0

啊,對。有點複雜,但肯定可以解決... – Tauren 2010-09-14 08:24:44

+0

@大衛:我認爲最新版本將工作。如果沒有更多來自OP的細節,那就好。 – Tauren 2010-09-14 08:39:55

1

您也可以通過object['someKey']訪問對象。