我有这个变量:
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;
答案 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:嗯,您可以在草率模式下使用eval
或with
语句来执行此操作,但两者都因此而受到鄙视。
答案 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/