代码之家  ›  专栏  ›  技术社区  ›  Fernando Gonzalez Sanchez

ES6用表达式解构

  •  0
  • Fernando Gonzalez Sanchez  · 技术社区  · 4 年前

    这很管用

    const { prop1:val1, prop2:val2 ) = req.query
    val1 = val1.toLowerCase()
    

    const { prop1.toLowerCase():val1, prop2:val2 } = req.query
    

    const { prop1:val1.toLowerCase(), prop2:val2 } = req.query
    

    两者都不起作用。是否有与此类似的语法,或者必须在销毁赋值之外进行操作?

    0 回复  |  直到 6 年前
        1
  •  4
  •   Bergi    6 年前

    不,这是不可能的。解构赋值只赋值,不对值进行任意变换。(setter是一个例外,但它们只会使问题复杂化)。

    我建议你写信

    const { prop1, prop2:val2 ) = req.query;
    const val1 = prop1.toLowerCase();
    

    或者,在一个声明中:

    const { prop1, prop2:val2 ) = req.query, val1 = prop1.toLowerCase();
    
        2
  •  1
  •   user9366559 user9366559    6 年前

    此解决方案创建一个实用程序函数,该函数接收要分解的对象以及另一个对象,该对象是属性名称到转换函数的映射。它有点冗长,但确实有用。

    // Utility functions to perform specified transformations on an object
    function transformProps(obj, trans) {
      return Object.assign({}, obj, ...Object.entries(trans).map(([prop, fn]) => 
        prop in obj ? {[prop]: fn(obj[prop])} : null
      ));
    }
    
    const { prop1:val1, prop2:val2 } = transformProps(
      {prop1: "FOO", prop2: "BAR"},
      {prop1: v => v.toLowerCase()} // Transformations to be made
    );
    
    console.log(val1, val2);