У меня есть объект 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?
    }
}
1
AP257 14 Сен 2010 в 12:01

3 ответа

Лучший ответ

Так как ваш пример кода имеет некорректный массив, я включу 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];
        }
    }
}

Наслаждаться.

1
BGerrissen 14 Сен 2010 в 08:46
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
Tauren 14 Сен 2010 в 17:09

Вы также можете получить доступ к объектам через object['someKey'].

1
jwueller 14 Сен 2010 в 08:04