JavaScript对象-不使用eval添加属性?
我有一个JavaScript对象,我想向其中添加一些属性,但直到运行时我才知道属性的名称 我可以不使用eval进行此操作吗?如果是,怎么做JavaScript对象-不使用eval添加属性?,javascript,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 ){
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?
}
}
var get_params=new Object();
变量参数={'name':'john','age':'23'}//实际上直到运行时才知道
对于(var i=0,len=params.length;i您也可以通过object['someKey']
访问对象。由于您的代码示例的数组格式不正确,因此我将包括两种变体
变量1(参数是实际对象而不是数组):
变体2(param是包含对象的数组):
享受。我肯定您键入的速度太快了,但是object的语法是{},而不是[]:)很难说您想要的是什么样的结果。牛头人对你想要的结果做了一个猜测,这似乎是合理的,但是,假设params
是一个对象似乎更合理,然后结果与你开始时的结果完全相同!你真的应该详细说明你想要的答案。你所说的p[1]
是什么意思p
在你的代码中不存在……for循环让我觉得他真的想要一个数组,而不是一个对象。否则,他应该使用for(参数中的变量i)
。这也不起作用。这里p
是一个对象-例如{'name':'john'}
-并且p[0]
不存在。我很确定OP的意思是params是{'name':'john','age':'23'}
,在这种情况下,您最初的解决方案更接近,但不正确。这只是我的猜测,但无论如何,这都不起作用。结果将是当前的get_params={undefined:undefined}
@David:我认为最新的版本可以工作。没有更多的细节从OP,这是最好的,因为它得到了。是的!现在结果就是你所说的。如果这是OP想要的,恐怕我们只能猜测,所以是的,我同意目前这是最好的。@David,是的,是最好的。但我确实为hasOwnProperty添加了一张彻底性检查单。让我吃惊的是,所选答案包含依赖于对未定义元素的数组访问的代码。想想看……第一个解决方案基本上得到了与params相同的东西。关键是,为什么不使用params本身的值呢?第二个解决方案似乎工作正常,但当i=2时,实际上数组中有一个未定义元素的引用。这个解决方案依赖于javascript将您踢出for循环,因为您试图引用params[2],这是一个不存在的元素。正如我所说,这是可行的,但这不是我想要的方式。
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"
}
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];
}
}
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];
}
}
}