Javascript 分解深层属性

Javascript 分解深层属性,javascript,ecmascript-6,Javascript,Ecmascript 6,我最近开始使用ES6的赋值语法,并开始熟悉这个概念。我想知道是否可以使用相同的语法提取嵌套属性 例如,假设我有以下代码: let cagingIt = { foo: { bar: 'Nick Cage' } }; 我知道我可以通过执行以下操作将extractfoo访问到变量中: // where foo = { bar: "Nick Cage" } let { foo } = cagingIt; 但是,是否可以提取深度嵌套的属性,如bar。也许是这样的: // where b

我最近开始使用ES6的赋值语法,并开始熟悉这个概念。我想知道是否可以使用相同的语法提取嵌套属性

例如,假设我有以下代码:

let cagingIt = {
  foo: {
    bar: 'Nick Cage'
  }
};
我知道我可以通过执行以下操作将extract
foo
访问到变量中:

// where foo = { bar: "Nick Cage" }
let { foo } = cagingIt;
但是,是否可以提取深度嵌套的属性,如
bar
。也许是这样的:

// where bar = "Nick Cage"
let { foo[bar] } = cagingIt;

我试着找到关于这件事的文件,但没有用。任何帮助都将不胜感激。谢谢大家!

有一种方法可以使用此语法处理嵌套对象和数组。鉴于上述问题,解决方案如下:

let cagingIt = {
      foo: {
        bar: 'Nick Cage'
      }
    };
let { foo: {bar: name} } = cagingIt;

console.log(name); // "Nick Cage"
在本例中,
foo
指的是属性名“foo”。在冒号之后,我们使用
bar
,它引用属性“bar”。最后,
name
充当存储值的变量

对于阵列的分解,您可以这样处理:

let cagingIt = {
      foo: {
        bar: 'Nick Cage',
        counts: [1, 2, 3]
      }
    };

let { foo: {counts: [ ct1, ct2, ct3 ]} } = cagingIt;
console.log(ct2); // prints 2
它遵循与对象相同的概念,只是您可以使用数组分解并存储这些值


希望这有帮助

如果已安装lodash,则可以使用以下选项之一:

let cagingIt = {
      foo: {
        bar: 'Nick Cage'
      }
    };
let { foo: {bar: name} } = cagingIt;

console.log(name); // "Nick Cage"
\获取

var object={'a':[{'b':{'c':3}]};
_.get(对象'a[0].b.c');
// => 3
或者如果您需要多个键

\uuu.at

var object={'a':[{'b':{'c':3},4]};
_.at(对象[a[0].b.c',a[1]']);
// => [3, 4]
您还可以安全地将
\uuu.at()
与数组分解配对。方便json响应

[标题、艺术家、发行版、艺术品]=\uu.at(对象、[
'项目[0]。正在录制。标题',
'项目[0]。录制。艺术家[0]。名称',
'项目[0]。录制。发布[0]。标题',
'项目[0]。录制。发布[0]。艺术品[0]。url'
]);

Is{bar}=cagingIt.foo;不够?@RobFoley肯定是一个很好的解决方法,但更好奇的是语法是否支持对深度嵌套属性的分解。你肯定喜欢Nicholas Cage。同意@Dom。我希望有一个像foo一样存在于Mongo的解决方案。$。Bar为什么我总是忘记这一点,而不得不继续回到这篇文章:/Neat,我戳了一下Babel repl,但是没有尝试这种语法。类似的一个例子是,当你在深度解构的同时使用计算属性名时,会变得非常疯狂。另一种奇怪的方法是让{['foo']:{['bar']:name}}=cagingIt;认为破坏不是零安全的,因此使用这种方法是有风险的。