用转换器解构对象

说,我有一个对象

const range = { min: '10', max: '20' }

我想解构它,以便之后我有 2 个变量:
-min值为10(not string '10'),以及
-max值为20

const { min, max } = range只会导致(not )min的值。我想要的是'10'10Number(10)

我怎么能那样做?我确实对 ES6 解构有所了解,并做了一些研究,尝试了不同的语法,但找不到满意的解决方案。有人可以推荐一个吗?

结论:下面的答案中有非常巧妙的语法,但是对于真正的代码,我只会使用更冗长但可读的语法:

const min = +range.min // or Number(range.min)
const max = -range.max // or Number(range.max)


慕田峪4524236
浏览 156回答 3
3回答

侃侃尔雅

一种方法是使用两个额外的变量+min和+max作为默认值,const range = { min: '10', max: '20' }const {min, max, numMin = +min, numMax = +max} = rangeconsole.log(numMin, numMax)注意:-在上面的方法中,请确保您使用对象中不可用的额外变量的名称,否则它不会使用默认值另一种方法是使用IIFE,在解构之前将对象值转换为数值const range = { min: '10', max: '20' }const {min,max} = ( ({min,max}) => ( {min: +min, max: +max} ) )(range)console.log(min,max)在实际目的或实际代码中,我不会使用这种棘手的方法,因为我更喜欢可读性并且它有自己的好处const range = {  min: '10',  max: '20'}const min = parseInt(range.min)const max = parseInt(range.max)console.log(max, min)

慕桂英546537

您可以在数组中获取解构值并再次解构映射值。var range = { min: '10', max: '20' },    { min, max } = range;        [min, max] = [min, max].map(Number);console.log(typeof min, min);console.log(typeof max, max);

千万里不及你

我认为您不能将任何转换作为解构操作的一部分进行,但您可以先尝试进行转换。如果你有这样的功能:function parseKeys(obj) {    const parsed = {};    for (const key of Object.keys(obj)) {        try {            parsed[key] = parseInt(obj[key]);        } catch () {}    }    return { ...obj, ...parsed };}然后你可以有一个这样的单线:const { min, max } = parseKeys(range);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript