这有效......
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 :(得分:3)
不,这是不可能的。解构赋值只分配,它不对值进行任意转换。 (Setter是一个例外,但它们只会使这一点复杂化。)
我建议写
const { prop1, prop2:val2 ) = req.query;
const val1 = prop1.toLowerCase();
或者,在一个声明中:
const { prop1, prop2:val2 ) = req.query, val1 = prop1.toLowerCase();
答案 1 :(得分:1)
临时变量解决方案的问题在于它们将相同数据的不同版本引入范围,这可能导致错误。
此解决方案创建一个实用程序函数,用于接收要解构的对象以及第二个对象,该对象是属性名称到转换函数的映射。它有点冗长,但却可以解决问题。
// 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);