ES6在结构中的计算属性 - 构造整个对象

时间:2016-05-05 00:21:26

标签: javascript ecmascript-6

我有这个变量:

var a = {b:1, c:2, d:'rawr', rawr:10};

我想将这些构建到本地范围,所以我这样做:

var {b, c, d} = a;

这很好但我需要rawr。我试过这个:

var {b, c, d, [a.d]} = a;

但是这给了我missing : after property id所以我试过了:

所以我接着做了两步:

var {b, c, d} = a;
var {[d]} = a;

然而,这给了我SyntaxError: missing : after property id。无论如何在ES6中这样做了吗?

预期结果是:

var b = 1;
var c = 2;
var d = 'rawr';
var rawr = 10;

3 个答案:

答案 0 :(得分:8)

你可以像这样解构它:

var {b, c, d, [d]: q} = a;

因此,名称为d的属性中的任何内容都会分配给q

<强> UPD

您在更新中询问的内容是不可能的。*

答案 1 :(得分:4)

您需要为其指定一个变量。您不能使用“计算”​​变量名 1 ,因为这违反了标识符的静态范围解析规则。所以你应该做

var {b, c, d, [a.d]: rawr} = a;

获取a.d变量中rawr - 命名属性的值。

1:嗯,您可以在草率模式下使用evalwith语句来执行此操作,但两者都因此而受到鄙视。

答案 2 :(得分:-2)

您可以使用Object.keys()Function.prototype.bind(),但需要注意的是变量的值在数组中;还没有确定如何只返回变量。

var a = {
  b: 1,
  c: 2,
  d: 'rawr',
  rawr: 10
};

function de(val, key) {
  var [val] = window[val] = [a[val]];
}

Object.keys(a).forEach(de.bind(this));

console.log(b, c, d, rawr);

jsfiddle https://jsfiddle.net/ravkgzjb/2/