2015-12-10 8 views
10

Niedawno zacząłem używać składni przypisań ES6 destructuring i zacząłem poznawać tę koncepcję. Zastanawiam się, czy można wyodrębnić zagnieżdżoną właściwość przy użyciu tej samej składni.Niszczenie głębokich właściwości

Na przykład, powiedzmy, że mam następujący kod:

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

wiem, że jestem w stanie uzyskać dostęp do wyciągu foo do zmiennej wykonując:

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

Jednak jest to możliwe wypakuj głęboko zagnieżdżoną właściwość, na przykład bar. Być może coś takiego:

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

Próbowałem znaleźć dokumentację w tej sprawie, ale bezskutecznie. Każda pomoc będzie bardzo ceniona. Dziękuję Ci!

+0

Is {bar} = cagingIt.foo; niewystarczający? –

+0

@RobFoley to z pewnością dobry sposób, aby go rozwiązać, ale był bardziej ciekawy, czy składnia obsługuje destrukturyzację głęboko zagnieżdżonych właściwości. – Dom

+1

Z pewnością polubisz Nicholasa Cage'a. – Esteban

Odpowiedz

20

Istnieje sposób postępowania z zagnieżdżonymi obiektami i tablicami przy użyciu tej składni. Biorąc pod uwagę problem opisany powyżej, rozwiązaniem byłoby następujące:

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

console.log(name); // "Nick Cage" 

W tym przykładzie foo odnosi się do nazwy właściwości „foo”. Po dwukropku używamy bar, który odnosi się do właściwości "paska". Ostatecznie, name działa jako zmienna przechowująca wartość.

Jak na tablicy destructuring, byś obsługiwać go tak:

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

let { foo: {counts: [ ct1, ct2, ct3 ]} } = cagingIt; 
console.log(ct2); // prints 2 

Wynika to samo pojęcie jako obiekt, po prostu jesteś w stanie korzystać z tablicy rozpad i przechowywać te wartości, jak również.

Mam nadzieję, że to pomoże!

+1

Schludnie, trochę szturchnąłem replikę Babel, ale nie wypróbowałem tej składni. –

+1

Przykład czegoś podobnego znajduje się w https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Nested_object_and_array_destructuring – juvian

+1

Dostaje się naprawdę szalony, gdy używa się obliczonych nazw właściwości obok głębokiej destrukturyzacji. –

Powiązane problemy