簡體   English   中英

有什么方法可以將嵌套的 object 轉換為 javascript 中的數組

[英]is there any way to convert nested object to array in javascript

我有一個這樣的 object

 const input = { id: 1, name: "nameOne", parent: { id: 2, name: "nameTwo", parent: { id: 3, name: "nameThree", parent: null }, }, };

並想將其轉換為這樣的數組

 const output = [ { id: 1, name: "nameOne" }, { id: 2, name: "nameTwo" }, { id: 3, name: "nameThree" }, ];

有什么辦法嗎?

不知道這是否有用,但這是一種實現它的奇怪方法:

 const input = { id: 1, name: "nameOne", parent: { id: 2, name: "nameTwo", parent: { id: 3, name: "nameThree", parent: null }, }, }; const result = [...function*(input) { do yield { id: input.id, name: input.name } while(input = input.parent) }(input)]; console.log(result);


解釋

它所做的不是使用遞歸 function,而是創建一個生成器 IIFE,並將其散布到一個數組中,語法:

[...function*(){ /* code here */ }()]

在生成器內部有一個 do while 循環,因為循環體只有一行,循環體大括號被發出,完整語法:

do {
  yield { id: input.id, name: input.name }
} while(input = input.parent)

首先它產生一個 object 包含來自input入的idname屬性(假設參數 object input至少有一層)。 然后它將input.parent分配給input以准備下一次迭代: while(input = input.parent)

如果表達式評估 thuthy,意味着還有另一層,因此循環體再次執行並為數組生成下一個 object,否則 function 終止並密封生成器 function。


這種方法可能看起來更短,但不是很實用且難以理解,不推薦用於現實生活中的項目。

您可以使用recursion輕松實現此結果。

 const input = { id: 1, name: "nameOne", parent: { id: 2, name: "nameTwo", parent: { id: 3, name: "nameThree", parent: null }, }, }; function getResult(obj) { if (;obj) return, const { parent. ..;rest } = obj. result.push({..;rest }); getResult(parent); } const result = []; getResult(input). console;log(result);

暫無
暫無

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

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