标签: destructure

如何解构这个数组

我如何解构widthheight如果它们之前已经声明过?

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)

javascript arrays ecmascript-6 destructure

5
推荐指数
1
解决办法
141
查看次数

如何在打字稿中解构枚举值?

我在打字稿中有一个枚举,如下所示:

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)

javascript enums object typescript destructure

5
推荐指数
1
解决办法
5189
查看次数

如何将循环参数解构为固定大小的数组?

我试图将 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)

arrays for-loop raku destructure

4
推荐指数
1
解决办法
111
查看次数

如何将 vec 中的 n 个项目解构为变量?

在 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] …

vector rust destructure

2
推荐指数
1
解决办法
923
查看次数