在JavaScript解构中捕获嵌套级别

时间:2019-02-28 17:22:49

标签: javascript destructuring

JavaScript解构是否具有捕获对象及其内容的语法?

换句话说,我是否可以在函数的arg列表中完全完成以下操作,而无需以下const行?

f = (a) => {
  const {b} = a;
  console.log("I see:", a, "and", b);
}

f({b:42})

==> I see {b: 42} and 42

(FWIW:我正在考虑Clojure或ClojureScript中的:as之类的东西。)

2 个答案:

答案 0 :(得分:5)

是的

const f = (a, {b} = a ) => {
  console.log("I see:", a, "and", b);
}

f({b:42})

有关destructuring assignment的更多用例,您可以看到此

要注意的是:-在函数定义中,请始终保留比函数调用多一个的参数。

更新通过这种方式,您不必担心函数定义中的一个额外参数

const f = (...z) => (a=z[0],{b}=z[0],...arguments) => {
  console.log("I see:", a, "and", b, z);
}

f({b:42},{b:32})()

您也可以使用IIFE的@bergi进行尝试,谢谢您的投入。

const f = (a, ...z) => (({b}) => {
  console.log("I see:", a, "and", b, z);
})(a);

f({b:42},{b:32})

答案 1 :(得分:0)

这是一种方式

const f = (a, {b}=a) => {
  console.log("I see:", a, "and", b);
}

f({b:42})

当您需要传递多个参数时,就会出现问题。

const f = (a, {b}=a) => {
  console.log("I see:", a, "and", b);
}

f({b:42},123)