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

Cod*_*iac 19 javascript destructuring ecmascript-6

我正在尝试围绕解构任务进行实验。现在,我有一个案例,我试图应对自身的破坏。

例如,我有这样的输入:

let input = {latitude: "17.0009", longitude: "82.2108"}
Run Code Online (Sandbox Code Playgroud)

其中latitudelongitude键值是字符串,但我想在进行结构分解时将它们解析为数字。

let input = {latitude: "17.0009", longitude: "82.2108"}
Run Code Online (Sandbox Code Playgroud)

我可以在babel repl中看到这需要引用一个对象,然后访问每个键。因此,以上代码与以下代码相同:

"use strict";

 var arr = {
   latitude: "17.0009",
   longitude: "82.2108"
  };
 var latitude = arr.latitude,
     longitude = arr.longitude;
Run Code Online (Sandbox Code Playgroud)

我想做一些使用解构语法本身的事情。

"use strict";

var arr = {
  latitude: "17.0009",
  longitude: "82.2108"
};
var latitude = Number(arr.latitude),
    longitude = Number(arr.longitude);
Run Code Online (Sandbox Code Playgroud)

我也很乐意看到一些技巧。

更新资料

我可以与,操作员一起提出一些建议:

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

console.log(typeof latitude,typeof longitude)
Run Code Online (Sandbox Code Playgroud)

附带说明:-您必须阅读 莫里茨·罗斯勒的回答,这很不客气,但包含很好的知识和信息

adi*_*iga 16

解构只是从对象和数组解压缩属性并将其分配给变量的一种好方法。正如问题中的翻译代码所暗示的,任何类型的操作都是不可能的。

一种破解方法是再创建2个变量(在中不存在input),并将默认值设置为与先前已分解的属性相等的数量:

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

该代码大致横贯于此(Babel):

var latitude = input.latitude,
    longitude = input.longitude,
    lat = input.lat === undefined ? +latitude : input.lat,
    long = input.long === undefined ? +longitude : input.long;
Run Code Online (Sandbox Code Playgroud)

它只是利用创建变量和分配属性值的顺序。同样,仅当中没有latlong属性时,此方法才有效input。否则,它将失败三元条件lat并将其设置为input.lat


像这样的东西将更容易阅读:

let { latitude, longitude } = input;
let lat = +latitude, 
    long = +longitude;
Run Code Online (Sandbox Code Playgroud)

要么

let [ lat, long ] = [ +latitude, +longitude ]
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的主意:)是的,那是我做的,但是使用`,`运算符,可读性较差 (2认同)
  • 如果我们可以`let {+ latitude} =…` (2认同)

Nin*_*olz 10

您可以解构值,获取值的数组,然后映射值的新数据类型,然后将此值分配回变量。

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

[latitude, longitude] = [latitude, longitude].map(Number);

console.log(typeof latitude, latitude);
console.log(typeof longitude, longitude);
Run Code Online (Sandbox Code Playgroud)


Ali*_*eza 5

您可以具有一个可重用的函数,如下所示:

const numberInputs = input =>
    Object.keys(input).reduce((acc, val) => {
        acc[val] = +input[val];
        return acc;
    }, {});
Run Code Online (Sandbox Code Playgroud)

然后在...之间重复使用

然后做:

let {latitude,longitude} = numberInputs(input);

console.log(typeof latitude,typeof longitude) //number //number
Run Code Online (Sandbox Code Playgroud)

并得到17.000982.2108作为数字...

这样,您还保留了原始对象并进行了复制...因此,您既拥有对象又拥有具有数字作为值的对象的副本...