繁体   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