【问题标题】:Destructuring argument with object and key from destructured object?使用来自解构对象的对象和键解构参数?
【发布时间】:2017-12-12 00:33:40
【问题描述】:

是否可以通过使用另一个解构参数作为键从传入的对象中获取解构变量?

var test = { 
    a: { 
        b: 'c' 
    },
    access: 'b' 
};

myFunc(test);

function myFunc( { a : { access /*???*/ } } ) {
    console.log(/*???*/);  // should output 'c'
}

工作方式-

function myFunc( { a, access }) {
    console.log(a[access]);  // should output 'c'
}

【问题讨论】:

  • 您可能打算声明:function myFunc (c) {... 并调用函数:myFunc(test.a.b);
  • 顺便说一句,它被称为破坏ur而不是破坏。
  • 不,你不能简单地通过一次解构来做到这一点。
  • @alfasin 检查历史记录,在我发表评论之前就已经存在。 stackoverflow.com/revisions/47763647/3 --- 它是在 30 分钟前添加的。
  • 我明白了,可能我的视图没有刷新...

标签: javascript ecmascript-6 destructuring


【解决方案1】:

是的,这可以使用计算属性名称:

function myFunc( { access, a : { [access]: val } } ) {
    console.log(val); // does output 'c' when called with test
}

在访问a 的属性之前,您需要确保首先初始化access。

但是我建议避免这种情况,它会让任何读者感到困惑。不要试图变得聪明。你的工作方式也是最易读的方式。

【讨论】:

  • 人们需要学习技巧才能更聪明地思考他们可以用一种语言完成什么,我不介意让任何人感到困惑
  • @RenaissanceProgrammer 我也不介意学习,但我仍然会在生产代码中避免这种情况并使用更简单的选项。
  • @Bergi 一切都在生产中被打乱、缩小和混淆 ;-),它更加混乱
  • @RenaissanceProgrammer 我的意思是“生产级”代码,而不是用于实验、玩具示例和爱好项目的代码。我不会使用这种可维护性是关键的代码风格。
  • 似乎是沙中的任意线
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
相关资源
最近更新 更多