标签: destructuring

数组解构跳过值

我的airbnb 风格指南告诉我我应该在下面的任务中使用数组解构

const splittedArr  = [1, 2, 3, 4, 5]
const result = splittedArr[1];
Run Code Online (Sandbox Code Playgroud)

所以我使用 skipping values 像这样编写它以获得第二个元素。

const splittedArr  = [1, 2, 3, 4, 5]
const [, result] = splittedArr;
Run Code Online (Sandbox Code Playgroud)

const splittedArr  = [1, 2, 3, 4, 5]
const result = splittedArr[1];
Run Code Online (Sandbox Code Playgroud)

但是例如当我有一个更高的指数要破坏时

const splittedArr  = [1, 2, 3, 4, 5]
const result = splittedArr[5];
Run Code Online (Sandbox Code Playgroud)

这意味着我必须像这样写

const splittedArr  = [1, 2, 3, 4, 5]
const [,,,, result] = splittedArr;
Run Code Online (Sandbox Code Playgroud)

javascript arrays destructuring airbnb-js-styleguide

9
推荐指数
2
解决办法
219
查看次数

在destructuring-bind中声明未使用的变量的任何好方法?

我无法想象,有没有办法在erlang中输入_之类的东西,在destructuring-bind中使用"未使用的值"?

例如,我们有类似的东西:

(destructuring-bind ((_SNIPPET
                               (_TITLE . title)
                               (_DESCRIPTION . description)
                               _RESOURCE-ID (_VIDEO-ID . video-id)))) entry
                (declare (ignore 
                          _SNIPPET _TITLE _DESCRIPTION _RESOURCE-ID _VIDEO-ID))
                (list video-id title description)))
Run Code Online (Sandbox Code Playgroud)

如果不为每个未使用的值放置特定变量,那就太棒了,写下这样的东西:

 (destructuring-bind ((_
                         (_ . title)
                         (_ . description)
                         (_ (_ . video-id)))) entry
                    (list video-id title description)))
Run Code Online (Sandbox Code Playgroud)

有没有办法通过标准解构 - 绑定或任何其他标准宏来获得这种行为?或者我必须使用一些类似ML的模式匹配库,如果是这样 - 哪一个?

lisp common-lisp pattern-matching destructuring

8
推荐指数
2
解决办法
1433
查看次数

Babel对ES6对象解构的实现是否正确?

所以基本的desctucturing是好的,{a, b} = obj转化为a = obj.a; b = obj.b.

我的问题是我偶然遇到的一些奇怪的语法,我想知道是否有人可以指出我的规格,因为我找不到它:

({a, b} = obj).c
Run Code Online (Sandbox Code Playgroud)

这样就做了两个a,b分配然后返回obj.c.对我来说,字节流解码器实际上非常有用,我可以写:

let width = ({bytes} = intDecode(bytes)).number;
Run Code Online (Sandbox Code Playgroud)

我的问题是我没有在任何地方看到过这种语法,也不想依赖于错误实现或提案阶段的内容.

javascript destructuring ecmascript-6

8
推荐指数
1
解决办法
470
查看次数

是否有可能将一个clojure矢量解构为最后两个项目,其余的?

我知道我可以像这样"从前面"构建一个矢量:

(fn [[a b & rest]] (+ a b))
Run Code Online (Sandbox Code Playgroud)

是否有(短)方式来访问最后两个元素

(fn [[rest & a b]] (+ a b)) ;;Not legal
Run Code Online (Sandbox Code Playgroud)

我目前的替代方案是

(fn [my-vector] (let [[a b] (take-last 2 my-vector)] (+ a b))) 
Run Code Online (Sandbox Code Playgroud)

它试图找出是否有办法直接在函数参数中以更方便的方式做到这一点.

clojure destructuring

8
推荐指数
2
解决办法
929
查看次数

F#:解构与受歧视的联合绑定

open System

let x = (1, 2)
let (p, q) = x
printfn "A %A" x
printfn "B %A %A" p q

let y = Some(1, 2)
try
  let None = y
  ()
with
  | ex -> printfn "C %A" ex
let Some(r, s) = y
printfn "D %A" y
// printfn "E %A %A" r s
Run Code Online (Sandbox Code Playgroud)

当我取消注释最后一行时,编译器拒绝代码抱怨

/home/rRiy1O/prog.fs(16,19):错误FS0039:值或构造函数'r'未定义
/home/rRiy1O/prog.fs(16,21):错误FS0039:值或构造函数的' 没有定义

是不允许在解构中使用枚举let

但首先,甚至当我注释掉最后一行...什么在这里干什么?这是输出:

A (1, 2)
B 1 2
D Some (1, 2)
Run Code Online (Sandbox Code Playgroud)

更新

为了记录,这是固定版本: …

f# pattern-matching destructuring let variable-declaration

8
推荐指数
1
解决办法
800
查看次数

我如何规划混合地图?

写完这个答案之后,我受到启发,尝试使用以下方法指定Clojure的解构语言spec:

(require '[clojure.spec :as s])

(s/def ::binding (s/or :sym ::sym :assoc ::assoc :seq ::seq))

(s/def ::sym (s/and simple-symbol? (complement #{'&})))
Run Code Online (Sandbox Code Playgroud)

顺序解构部分很容易用正则表达式进行规范(所以我在这里忽略它),但我陷入了联想解构.最基本的情况是从绑定表单到键表达式的映射:

(s/def ::mappings (s/map-of ::binding ::s/any :conform-keys true))
Run Code Online (Sandbox Code Playgroud)

但Clojure也提供了几个特殊键:

(s/def ::as ::sym)
(s/def ::or ::mappings)

(s/def ::ident-vec (s/coll-of ident? :kind vector?))
(s/def ::keys ::ident-vec)
(s/def ::strs ::ident-vec)
(s/def ::syms ::ident-vec)

(s/def ::opts (s/keys :opt-un [::as ::or ::keys ::strs ::syms]))
Run Code Online (Sandbox Code Playgroud)

如何::assoc为可以通过将符合::mappings的地图和符合的地图合并在一起创建的地图创建规范::opts?我知道有merge:

(s/def ::assoc (s/merge ::opts ::mappings))
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为merge …

clojure destructuring clojure.spec

8
推荐指数
1
解决办法
333
查看次数

解析es6中的对象数组

在es6中,如何使用解构来简化以下行?:

const array0 = someArray[0].data;
const array1 = someArray[1].data;
const array2 = someArray[2].data;
Run Code Online (Sandbox Code Playgroud)

javascript destructuring ecmascript-6

8
推荐指数
2
解决办法
8349
查看次数

打字稿:如何键入休息对象解构

如果我有这两个对象

interface Input {
    one?: string;
    two?: string;
    c?: string
}

interface Data {
    one?: string;
    a?: string;
    b?: string;
    c?: string
}
Run Code Online (Sandbox Code Playgroud)

目前我必须做类似的事情

const { one, two, ...restOfData } = input;
const data: Data = {...restOfData};
Run Code Online (Sandbox Code Playgroud)

可以...restOfData直接打字吗?

我希望能够做到这一点

const { one, two, ...data } = input;
data.one = 'test' + one;
data.a = one;
Run Code Online (Sandbox Code Playgroud)

destructuring typescript

8
推荐指数
1
解决办法
3851
查看次数

无法读取null属性进行破坏

销毁很酷,但是在销毁嵌套对象时我开始遇到严重的问题。我有以下代码:

const {
      credit: { amont },
    } = userProfile
Run Code Online (Sandbox Code Playgroud)

这很危险,因为如果信用为空怎么办?整个应用中断了。我该如何预防?我知道一种方法是使用Typescript,但我宁愿不这样做。我开始怀疑对嵌套的破坏与使用点没有什么区别。

javascript destructuring ecmascript-6 reactjs

8
推荐指数
1
解决办法
2059
查看次数

使用默认值来构建嵌套对象的更清洁方法?

我有一个嵌套的对象可能有缺少的东西:

const unreliableObject = {
    id: 10,
    nestedObject: { // may be missing
        id: 11 // may also be missing
    }
}
Run Code Online (Sandbox Code Playgroud)

现在说我想得到内心的id.我可以做以下事情

const { nestedObject: { id: key = -1 } = {key: -1} } = unreliableObject;
console.log(key);
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?我没有定义{key: -1}两次的东西,也没有使用空对象(我们有lint规则),在这种情况下我仍然想要默认密钥.

javascript destructuring

8
推荐指数
1
解决办法
107
查看次数