将多个动态键名附加到javascript对象的简便方法

时间:2012-03-09 04:40:55

标签: javascript jquery

我发现自己(可能)为自己做了更多工作,因为必须一次指定一行动态键。

我现在正在做的是为现有对象添加其他键:

create_request[('title_' + id)] = field_data[0];
create_request[('field_' + id)] = field_data[1];

我希望能够做的是:

jQuery.extend({('title_' + id) : field_data[0], ('field_' + id) : field_data[1]});

是否有一种比我现在所做的更简单的方式(因为我希望它能起作用)?或者这只是语言的限制?

为清晰起见编辑:

好的,你可以在这样的javascript中创建一个对象:

{
 a : 1
}

但是假设a是键的字符串值。如果我希望密钥是变量的值,该怎么办?

我能做到:

the_object[variable] = 1

但是,如果我想在对象中执行多个动态插入操作,该怎么办?有没有方便的方法呢?

2 个答案:

答案 0 :(得分:3)

如果我只能改变一件关于JavaScript的东西,那就是对象文字语法。我认为属性名称应该被评估为与属性值相同的表达式;我认为这样做的好处可能会在使用静态名称时被迫包含引用的属性名称。但是,如果愿望是鱼......

使用方括号表示法是使用动态名称设置属性的唯一内置方法,但是创建自己的函数并不难获得与您希望使用的语法非常相似的输入:

extendObject(obj, props) {
   for (var i = 0; i < props.length; i+=2)
      obj[props[i]] = props[i+1];
}

extendObject(create_request, ['title_' + id, field_data[0], 'field_' + id, field_data[1]]);

通过使用数组而不是普通对象来保存新的属性名称和值,您可以使用动态名称。

(另请注意,即使您的问题中使用方括号语法,您也可以通过包含多余的括号使其稍微复杂一些。)

答案 1 :(得分:0)

您可以按如下方式使用 Object#assign

Object.assign( create_request, {[`title_${id}`]:field_data[0], [`field_${id}`]:field_data[1]} );

演示

let create_request = {a:1}, field_data = [5,79,59,100,3090], id = 3;

Object.assign( create_request, {[`title_${id}`]:field_data[0], [`field_${id}`]:field_data[1]} );

console.log( create_request );