Javascript:使用一个预先存在的对象值作为一个新对象的键
Javascript: Using a pre-existent object values as keys os a new one
我创建了这个对象:
var keys = {A: 'a', B: 'b' };
后来我尝试创建另一个对象:
var values = {keys.A: 1, keys.B: 2};
然而,我在Firefox控制台中得到了这个:
SyntaxError: missing : after property id
即使我尝试过:
var vals = {keys['A']: 1, keys['B']: 2}
我也犯了同样的错误。
获得成功的唯一方法是如果我键入以下内容:
var vals= {};
vals[keys.A] = 1;
vals[keys.B] = 2;
因此,我的问题是,是否有一种更优雅的方法(类似于第一次尝试)可以使用预先存在的对象的值作为键来创建匿名对象。
谢谢,
Rafael Afonso
是的,更优雅的方法是使用ES6语法:
var values = {[keys.A]: 1, [keys.B]: 2};
括号里的东西可以是任何表达式,所以运行wild:
var values = { [createPropName() + "_prop"]: 42 }
这被称为"计算(动态)特性名称"。看见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names.
试试这个
var keys = {A: 'a', B: 'b' },
foo = {};
for (key in keys) { foo[key] = keys[key] }
在对象初始化程序中,属性名称必须是以下之一:
- 标识符名称
- 字符串文字
- NumericLiteral
您可以在ES5中使用Object文字作为键,使用Array文字作为值:
var keys = {A: 'a', B: 'b' };
var values = [1, 2];
var obj = {};
Object.keys(keys).forEach(function(v, i) {
obj[v] = values[i];
});
console.log(JSON.stringify(obj)) // {"A":1,"B":2}
然而,这是不可靠的,因为对象属性可能不会按照您期望的顺序返回,所以您可能会得到:
{"B":1,"A":2};
为了在ES5中执行您想要的操作并保证订单,需要一个键数组和一个值数组,因此类似于:
var keys = ['a', 'b', 'c'];
var values = [1, 2, 3];
var obj = {};
keys.forEach(function(v, i) {obj[v] = values[i]});
console.log(JSON.stringify(obj)) // {"a":1, "b":2, "c":3}
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- 如何使用jQuery添加另一个对象的高度作为边距
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何将一个对象添加到每个对象数组中
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 将javascript对象(属性+值)合并到一个对象中
- 尝试简化检查对象键是否为true并将其推送到另一个对象
- 从 javascript 中的对象方法返回一个对象
- 响应应包含一个对象,但得到的却是GET操作的数组
- js:如何制作一个循环,将20个不同的东西添加到一个对象中
- 用javascript创建另一个对象的实例