编程语言
首页 > 编程语言> > javascript – 如何在解构时将字符串解析为数字?

javascript – 如何在解构时将字符串解析为数字?

作者:互联网

我试图围绕解构分配进行试验.现在我有一个案例,我试图解决自我解构.

例如,我有这样的输入:

let input = {latitude: "17.0009", longitude: "82.2108"}

纬度和经度键值是字符串,但我想在解构时将它们解析为数字.

let input = {latitude: "17.0009", longitude: "82.2108"}
let {latitude,longitude} = input

console.log(typeof latitude,typeof longitude)

我可以在babel repl中看到,它接受一个对象的引用,然后访问每个键.所以上面的代码与:

"use strict";

 var arr = {
   latitude: "17.0009",
   longitude: "82.2108"
  };
 var latitude = arr.latitude,
     longitude = arr.longitude;

我想做一些像使用解构语法本身.

"use strict";

var arr = {
  latitude: "17.0009",
  longitude: "82.2108"
};
var latitude = Number(arr.latitude),
    longitude = Number(arr.longitude);

我也愿意看到一些黑客攻击.

更新

我能够与操作符一起进行一次黑客攻击:

let arr = {latitude: "17.0009", longitude: "82.2108"}

let {lat,lng} = ({latitude,longitude} = arr, ({lat:+latitude,lng:+longitude}))

console.log(typeof lat, typeof lng)

旁注: – 你必须阅读
Moritz Roessler’s answer
这是hacky但包含良好的知识和信息

解决方法:

解构只是从对象和数组中解包属性并将它们分配给变量的好方法.正如问题中的trasnpiled代码所暗示的那样,任何类型的操作都是不可能的.

一个hack就是创建另外两个变量(在输入中不存在)并将default value设置为与之前被破坏的属性等价的数字:

let input = { latitude: "17.0009", longitude: "82.2108" }
let { latitude, longitude, lat = +latitude, long = +longitude } = input

console.log(typeof latitude, typeof longitude, typeof lat, typeof long)

代码大约是trasnpliles到此(Babel):

var latitude = input.latitude,
    longitude = input.longitude,
    lat = input.lat === undefined ? +latitude : input.lat,
    long = input.long === undefined ? +longitude : input.long;

它只是利用创建变量的顺序和赋值属性.同样,仅当输入中没有lat或long属性时,此方法才有效.否则,它将失败三元条件,lat将被设置为input.lat.

这样的东西会更容易阅读:

let { latitude, longitude } = input;
let lat = +latitude, 
    long = +longitude;

要么

let [ lat, long ] = [ +latitude, +longitude ]

标签:destructuring,javascript,ecmascript-6
来源: https://codeday.me/bug/20191004/1853870.html