2015-12-10 11 views
10

私は最近、ES6のdestructuring割り当て構文を使用し始め、概念をよく理解し始めました。私は同じ構文を使用してネストされたプロパティを抽出することが可能かどうか疑問に思っていた。ディープ・プロパティーを分解する

たとえば、のは、私は次のコードを持っているとしましょう:私は私がやって変数に抽出fooにアクセスすることができる午前知っ

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

を:

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

をただし、することが可能ですbarのように、深くネストされたプロパティを抽出します。おそらく次のようなものです:

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

私はこの問題に関する文書を探してみましたが、役に立たなかったのです。どんな助けでも大歓迎です。ありがとうございました!

+0

{bar} = cagingIt.fooです。不十分? –

+0

@RobFoleyこれは間違いなく良い方法ですが、シンタックスが深くネストされたプロパティの破壊をサポートしているかどうかについてもっと興味がありました。 – Dom

+1

あなたはニコラスケージが好きです。 – Esteban

答えて

20

この構文を使用して入れ子になったオブジェクトと配列を処理する方法があります。この例では

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 

それはオブジェクトと同じコンセプトを次の、ちょうどあなたは配列な破壊を使用し、同様にそれらの値を格納することができます。

希望すると便利です。

+1

きちんとした、私は少しBabel replを突き刺しましたが、その構文を試しませんでした。 –

+1

似たような例がhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Nested_object_and_array_destructuringにあります – juvian

+1

深い構造化と同時に計算されたプロパティ名を使用すると、本当に狂ってしまいます。 –

関連する問題