用转换器破坏对象

Huỳ*_*yễn 1 javascript object destructuring ecmascript-6

说,我有一个对象

const range = { min: '10', max: '20' }
Run Code Online (Sandbox Code Playgroud)

我想对其进行分解,以便在此之后有2个变量:
- min值为10(not string '10'),以及
- max值为20

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

我该怎么办?我确实对ES6解构有所了解,并进行了一些研究,尝试了不同的语法,但找不到满意的解决方案。有人可以建议一个吗?

结论:下面的答案中有一个非常不错的聪明语法,但是对于真实的代码,我只会使用更冗长但可读的代码:

const range = { min: '10', max: '20' }
Run Code Online (Sandbox Code Playgroud)

Cod*_*iac 6

一种方法是使用带有+min+max作为默认值的两个额外变量,

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

const {min, max, numMin = +min, numMax = +max} = range

console.log(numMin, numMax)
Run Code Online (Sandbox Code Playgroud)

注意:-在上述方法中,请确保您使用对象中不可用的额外变量的名称,否则它将不使用默认值


另一种方法是使用IIFE,在解构之前将对象值转换为数值

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

const {min,max} = ( ({min,max}) => ( {min: +min, max: +max} ) )(range)

console.log(min,max)
Run Code Online (Sandbox Code Playgroud)


在实际目的或实际代码中,我不会使用这种棘手的方式,因为我更喜欢可读性,并且它具有自己的优势

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

const min = parseInt(range.min)
const max = parseInt(range.max)

console.log(max, min)
Run Code Online (Sandbox Code Playgroud)


Nin*_*olz 5

您可以将解构后的值放入数组中,然后再次对映射后的值进行解构。

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);
Run Code Online (Sandbox Code Playgroud)