我如何解构width,height如果它们之前已经声明过?
function test() {
let height
let width
const viewBox = '0 0 24 24'
const sizeArr = viewBox.split(' ')
// ESLint is telling me to destructure these and I don't know how
width = sizeArr[2]
height = sizeArr[3]
}
Run Code Online (Sandbox Code Playgroud) 我在打字稿中有一个枚举,如下所示:
export enum XMPPElementName {
state = "state",
presence = "presence",
iq = "iq",
unreadCount = "uc",
otherUserUnreadCount = "ouc",
sequenceID = "si",
lastSequenceID = "lsi",
timeStamp = "t",
body = "body",
message = "message"
}
Run Code Online (Sandbox Code Playgroud)
并想要解构它的价值,我们如何在 Typescript 中做到这一点?
const { uc, ouc, msg, lsi, si, t, body } = XMPPElementName;
Run Code Online (Sandbox Code Playgroud)
正如 @amadan提到的,我们可以Assigning to new variable names像 Mozilla 文档中所说的那样使用Destructuring_assignment,如下所示:
属性可以从对象中解包并分配给与对象属性名称不同的变量。
const { uc, ouc, msg, lsi, si, t, body } = XMPPElementName; …Run Code Online (Sandbox Code Playgroud) 我试图将 for 循环中的参数放入 FIXED 大小的数组中。这就是我一直在做的事情(我想使用一个包含 3 个元素的数组 @m):
for (1..19).rotor(3, :partial) -> @m { say @m; } # works, but I cannot specify size of @m
Run Code Online (Sandbox Code Playgroud)
但是,以下所有内容都给了我错误:
for (1..19).rotor(3, :partial) -> @m[0,1,2] { say @m; }
===SORRY!=== Error while compiling:
Variable '@m' is not declared
------> ).rotor(3, :partial) -> @m[0,1,2] { say ?@m; }
for (1..19).rotor(3 => -2) -> @m[0..2] { say @m; }
===SORRY!=== Error while compiling:
Variable '@m' is not declared
------> 1..19).rotor(3 => -2) -> @m[0..2] { …Run Code Online (Sandbox Code Playgroud) 在 JavaScript 中,我可以通过以下方式解构数组:
const [first, second, ...rest] = myArray
Run Code Online (Sandbox Code Playgroud)
Rust 是否有类似的方法来实现这一目标?
如果我只想要一个元素,那很简单。我可以:
let first = my_vec[0];
Run Code Online (Sandbox Code Playgroud)
或者,如果我从字符串创建一个数组,并且只想将 i 拆分为两部分,我可以这样做并用它获取一个元组(如果我只需要将数组拆分为两部分):
let (first, second) = my_string.split_once("\n").unwrap();
Run Code Online (Sandbox Code Playgroud)
但是更一般的解构模式怎么样,我可以忽略数组的一部分并定义一些变量并准备好使用?
我期待它看起来像这样:
let [first, second, ...] = my_vec;
Run Code Online (Sandbox Code Playgroud)
或者
let [first, ..middle, second_last, last] = my_vec;
Run Code Online (Sandbox Code Playgroud)
PS:忘记 - 部分unwrap。我知道我应该处理该错误,但这不是重点。
我尝试使用匹配表达式,但没有成功。它期望数组的长度为 2。
let [first, second] = match my_vec[..] {
[first, second] => [first, second],
v => v,
};
Run Code Online (Sandbox Code Playgroud)
我抱怨v并说: `match` arms have incompatible types expected array `[&str; 2]`, found slice `[&str] …
destructure ×4
arrays ×2
javascript ×2
ecmascript-6 ×1
enums ×1
for-loop ×1
object ×1
raku ×1
rust ×1
typescript ×1
vector ×1