[英]How to turn nested objects into array?
我正在努力完成一項看似微不足道的任務。 我需要遍歷這個嵌套的 object ...
[
{
"id": "1",
"name": "Level 1",
"parent": null,
"expanded": true,
"title": "Level 1",
"children": [
{
"id": "2",
"name": "Level 2",
"parent": 1,
"expanded": true,
"title": "Level 2",
"children": [
{
"id": "3",
"name": "Level 3",
"parent": 2,
"expanded": true,
"title": "Level 3"
}
]
}
]
}
]
...最終得到以下結構。
我試過了.map(Object.values) 但這似乎只是部分工作。 到達那里的最佳方式是什么? 有哪些替代方案?
[
{ id: '1', name: 'Level 1', parent: null, expanded: true },
{ id: '2', name: 'Level 2', parent: 1, expanded: true },
{ id: '3', name: 'Level 3', parent: 2, expanded: true }
]
您可以采用遞歸方法並將子對象與對象和 map、 rest
object 和扁平子對象分開。
var getFlat = ({ children = [], ...rest }) => [rest, ...children.flatMap(getFlat)], data = [{ id: "1", name: "Level 1", parent: null, expanded: true, title: "Level 1", children: [{ id: "2", name: "Level 2", parent: 1, expanded: true, title: "Level 2", children: [{ id: "3", name: "Level 3", parent: 2, expanded: true, title: "Level 3" }] }] }], result = data.flatMap(getFlat); console.log(result)
.as-console-wrapper { max-height: 100%;important: top; 0; }
你可以試試這個方法,這對你有用
let nestedArrayObj = [{ "id": "1", "name": "Level 1", "parent": null, "expanded": true, "title": "Level 1", "children": [{ "id": "2", "name": "Level 2", "parent": 1, "expanded": true, "title": "Level 2", "children": [{ "id": "3", "name": "Level 3", "parent": 2, "expanded": true, "title": "Level 3" }] }] }] let nestedArray = [] function nestedArrayFn(nestedArrayObj) { nestedArrayObj.forEach(obj => { nestedArray.push(JSON.parse(JSON.stringify(obj, ['id', 'name', 'parent', 'expanded']))) if (obj.children && obj.children.length) { nestedArrayFn(obj.children) } }) return nestedArray } let finalArray = nestedArrayFn(nestedArrayObj) console.log(finalArray)
您需要遞歸地遍歷嵌套的子項,如下所示:
const obj = {"id":"1","name":"Level 1","parent":null,"expanded":true,"title":"Level 1","children":[{"id":"2","name":"Level 2","parent":1,"expanded":true,"title":"Level 2","children":[{"id":"3","name":"Level 3","parent":2,"expanded":true,"title":"Level 3"}]}]}, flattenObj = ({title, children, ...rest}) => ([rest, ...(children? children.flatMap(flattenObj): [])]) console.log(flattenObj(obj))
.as-console-wrapper{min-height:100%;}
您可以構建一個recursive
function 來解決這個問題。
var data = [ { "id": "1", "name": "Level 1", "parent": null, "expanded": true, "title": "Level 1", "children": [ { "id": "2", "name": "Level 2", "parent": 1, "expanded": true, "title": "Level 2", "children": [ { "id": "3", "name": "Level 3", "parent": 2, "expanded": true, "title": "Level 3" } ] } ] }]; let resolve= (array, modified = []) =>{ array.forEach(({children, ...rest})=>{ modified.push(rest); if(children) resolve(children, modified); }); return modified; } console.log(resolve(data))
對 function Array.prototype.map
使用遞歸方法。
let a = [{ id: "1", name: "Level 1", parent: null, expanded: true, title: "Level 1", children: [{ id: "2", name: "Level 2", parent: 1, expanded: true, title: "Level 2", children: [{ id: "3", name: "Level 3", parent: 2, expanded: true, title: "Level 3" }] }] }]; function loop(arr) { let nested = []; return [].concat(arr.map(({id, name, parent, expanded, children}) => { if (children) nested = nested.concat(loop(children)); return {id, name, parent, expanded}; }), nested); } console.log(loop(a));
.as-console-wrapper { max-height: 100%;important: top; 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.