簡體   English   中英

從 Javascript 數組創建嵌套對象

[英]Create a nested object from a Javascript array

我有一個對象數組。 每個項目都有一個 paret id 提到。 我想創建一個嵌套對象,它的嵌套與子類別一樣多。 下面給出了輸入和預期輸出。 我怎樣才能用普通的 JS 實現這一點?

 var inputArr = [ { category_id: 1, parent_category_id: 3, title: "category1" }, { category_id: 2, parent_category_id: 1, title: "category2" }, { category_id: 3, title: "category3" }, { category_id: 4, parent_category_id: 1, title: "category4" }, { category_id: 5, parent_category_id: 2, title: "category5" } ] var expectedOutput = { category_id: 3, title: "category3", subcategories: [ { category_id: 1, subcategories: [ { category_id: 2, title: "category2", subcategories: [ { category_id: 5, title: "category5" } ] }, { category_id: 4, title: "category4" } ] } ] }

 var inputArr = [ { category_id: 1, parent_category_id: 3, title: "category1" }, { category_id: 2, parent_category_id: 1, title: "category2" }, { category_id: 3, title: "category3" }, { category_id: 4, parent_category_id: 1, title: "category4" }, { category_id: 5, parent_category_id: 2, title: "category5" } ]; var temp = []; var parent; for (var i = 0; i < inputArr.length; i++) { if (temp[inputArr[i].category_id]) { Object.assign(temp[inputArr[i].category_id], inputArr[i]); } else { temp[inputArr[i].category_id] = inputArr[i]; // uncomment the following assignment to add empty subcategories // array to leaf nodes for consistency. // temp[inputArr[i].category_id].subcategories = []; } var parentId = inputArr[i].parent_category_id; if (!parentId) { parent = temp[inputArr[i].category_id]; } else { if (!temp[parentId]) { temp[parentId] = { category_id: parentId, parent_category_id: undefined, title: undefined, subcategories: [temp[inputArr[i].category_id]] } } else { temp[parentId].subcategories = temp[parentId].subcategories || []; temp[parentId].subcategories.push(temp[inputArr[i].category_id]); } } delete temp[inputArr[i].category_id].parent_category_id; } temp = undefined; document.write('<code><pre>' + JSON.stringify(parent, null, 2) + '</pre></code>');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM