作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个不同的用例,在使用解构概念时,我希望新变量的名称来自不同的变量。
对于 ex(通常的解构):
var o = {p: 42, q: true};
var {p: foo, q: bar} = o;
console.log(foo, bar); // Works fine
工作正常,但是当我尝试用其他变量替换 p, foo, q, bar
时,我得到了错误,因为我无法获得正确的语法。
我最接近的是:
var o = {p: 42, q: true};
var x1 = "p";
var x2 = "foo";
var x3 = "q";
var x4 = "bar";
var {[x1]: foo, [x3]: bar} = o;
console.log(foo, bar);
其他我试过但没用的东西是:
var {[x1]: window[x2], [x3]: bar} = o; //Uncaught SyntaxError: Unexpected token [
var {[x1]: (()=>x2)(), q: bar} = o; //Uncaught SyntaxError: Unexpected token (
但在这里我仍然无法将foo, bar
替换为x2, x4
。
知道如何实现这一目标吗?或者甚至可以这样做吗?
最佳答案
您需要分配一个左值,但据我所知,您不能声明动态生成的变量名,如 let [dynamicName] = value
。但是,对象属性是另一种选择,它可以动态生成:
var o = {p: 42, q: true};
var container = {};
var x1 = "p";
var x2 = "foo";
var x3 = "q";
var x4 = "bar";
({[x1]: container[x2], [x3]: container[x4]} = o);
console.log(container.foo, container.bar);
在全局范围内,您可以滥用全局对象被用作对象环境的事实,并使用 window[x2]
和 window[x4]
,但是它在生产代码中并不是很有用。
关于javascript - 程序化解构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51399729/
我是一名优秀的程序员,十分优秀!