解构赋值中的 props 可以就地转换吗?
Can the props in a destructuring assignment be transformed in place?
这有效…
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
这两个都不起作用。是否有类似的语法或必须在破坏赋值之外进行操作?
不,这是不可能的。解构赋值只是赋值,它不会对值进行任意转换。 (二传手是个例外,但他们只会使事情复杂化)。
我会推荐写
const { prop1, prop2:val2 ) = req.query;
const val1 = prop1.toLowerCase();
或者,在一个声明中:
const { prop1, prop2:val2 ) = req.query, val1 = prop1.toLowerCase();
临时变量解决方案的问题在于它们将相同数据的不同版本引入范围,这可能会导致错误。
此解决方案创建了一个实用程序函数,该函数接收要解构的对象以及第二个对象,该对象是 属性 名称到转换函数的映射。它有点冗长,但可以解决问题。
// 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);
这有效…
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
这两个都不起作用。是否有类似的语法或必须在破坏赋值之外进行操作?
不,这是不可能的。解构赋值只是赋值,它不会对值进行任意转换。 (二传手是个例外,但他们只会使事情复杂化)。
我会推荐写
const { prop1, prop2:val2 ) = req.query;
const val1 = prop1.toLowerCase();
或者,在一个声明中:
const { prop1, prop2:val2 ) = req.query, val1 = prop1.toLowerCase();
临时变量解决方案的问题在于它们将相同数据的不同版本引入范围,这可能会导致错误。
此解决方案创建了一个实用程序函数,该函数接收要解构的对象以及第二个对象,该对象是 属性 名称到转换函数的映射。它有点冗长,但可以解决问题。
// 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);