javascript - 程序化解构

标签 javascript

我有一个不同的用例,在使用解构概念时,我希望新变量的名称来自不同的变量。

对于 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/

相关文章:

javascript - 选择未选中

javascript - 当我在 Django 中运行我的服务器时,我收到此请求错误,我一直在使用 Bootstrap

javascript - 输入聚焦/模糊背景位置?

javascript - 如何刷新 tempo js 以显示新数据?

javascript - 无法让 Canvas 元素中的图像显示为 DIV 背景图像 (HTML/Javascript)?

javascript - 当文本自动换行时,如何在 javascript/php 中获取换行符

javascript - 在 Canvas View 上处理滚动 - paperjs

javascript - 如何检查 Selection 对象是否包含两个同级 'Div' 或 'P'

javascript - 访问 "Object #<HTMLDivElement>"的元素属性

javascript - Anychart/Anystock 基本界面问题