2016-11-04 55 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

您可以重複剛纔的嵌套級別相同的語法與解構頂級:

編輯根據您的評論

我需要陣列內的對象

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);

預編輯:提取嵌套陣列內的對象的id。

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