Cod*_*iac 19 javascript destructuring ecmascript-6
我正在尝试围绕解构任务进行实验。现在,我有一个案例,我试图应对自身的破坏。
例如,我有这样的输入:
let input = {latitude: "17.0009", longitude: "82.2108"}
Run Code Online (Sandbox Code Playgroud)
其中latitude,longitude键值是字符串,但我想在进行结构分解时将它们解析为数字。
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)
它只是利用创建变量和分配属性值的顺序。同样,仅当中没有lat或long属性时,此方法才有效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)
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)
您可以具有一个可重用的函数,如下所示:
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.0009和82.2108作为数字...
这样,您还保留了原始对象并进行了复制...因此,您既拥有对象又拥有具有数字作为值的对象的副本...
| 归档时间: |
|
| 查看次数: |
1306 次 |
| 最近记录: |