2016-11-04 3 views
1

С разрушением ES6, является ли какой-либо способ разрушить вложенные объекты при присваивании?Вложенное деструктурирование по объектным назначениям

Вот краткий пример кода, чтобы показать, что я имею в виду:

let node = { 
    ItemTitle: 'Title', 
    ItemId: 5, 
    Menu: {Item: [{ItemId: 579}] 
} 

// my attempts 
    let { 
     ItemId: id, 
     ItemTitle: title, 
     Menu['Item']: subItems 
    } = node 

    let { 
     ItemId: id, 
     ItemTitle: title, 
     Menu.Item: subItems 
    } = node 

ответ

1

Вы можете просто повторить тот же синтаксис для вложенных уровней, с уничтожением того верхнего уровня:

EDIT на основе ваших комментариев

мне нужен объект в массиве

let node = { 
 
    ItemTitle: 'Title', 
 
    ItemId: 5, 
 
    Menu: {Item: [{ItemId: 579}]} 
 
} 
 

 
let { 
 
    ItemId: id,  // extract `node.ItemId` into a variable called `id` 
 
    ItemTitle: title, // extract `node.ItemTitle` into a variable called `title` 
 
    Menu: { 
 
    Item: [obj]  // extract `node.Menu.Item[0]` into a variable called obj 
 
    } 
 
} = node; 
 

 
console.log('id =', id); 
 
console.log('title =', title); 
 
console.log('obj =', obj);

Предварительное редактирование: Извлечение идентификатора объекта в пределах вложенного массива.

let node = { 
 
    ItemTitle: 'Title', 
 
    ItemId: 5, 
 
    Menu: {Item: [{ItemId: 579}]} 
 
} 
 

 
let { 
 
    ItemId: id,   // extract `node.ItemId` into a variable called `id` 
 
    ItemTitle: title,  // extract `node.ItemTitle` into a variable called `title` 
 
    Menu: { 
 
    Item: [{ 
 
     ItemId: subItemId // extract `node.Menu.Item[0].ItemId` into a variable called `subItemId` 
 
    }] 
 
    } 
 
} = node; 
 

 
console.log('id =', id); 
 
console.log('title =', title); 
 
console.log('subItemId =', subItemId);

+0

Спасибо за ответ, я теперь лучше понимаю. Однако, если вы проверите мой пример, node.Menu.Item - это массив. Как разрушить свойство массива объекта? –

+0

Какая часть массива вам нужна, объект внутри массива или свойство ItemId этого объекта? – nem035

+0

Спасибо, мне нужен объект в массиве. –

1

Да, вы можете сделать вложенную деструктурирующие с ES6. MDN gives you a nice example.

let node = { 
 
    ItemTitle: 'Title', 
 
    ItemId: 5, 
 
    Menu: { 
 
    Item: [{ 
 
     ItemId: 579 
 
    }] 
 
    } 
 
} 
 

 
let { Menu: { Item: [{ ItemId }] } } = node 
 

 
console.log(ItemId) // 579

Смежные вопросы