JavaScript对象 - 不使用eval添加属性?

时间:2010-09-14 08:01:06

标签: javascript

我有一个JavaScript对象,我想添加一些属性,但我不知道属性的名称是什么,直到运行时。

我可以不使用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?
    }
}

3 个答案:

答案 0 :(得分:1)

您也可以通过object['someKey']访问对象。

答案 1 :(得分: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(param是一个包含对象的数组):

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

享受。

答案 2 :(得分: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"
}