Javascript:使用一个预先存在的对象值作为一个新对象的键

Javascript: Using a pre-existent object values as keys os a new one

本文关键字:一个 对象 新对象 Javascript 存在      更新时间:2023-09-26

我创建了这个对象:

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}