[英]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
入的id
和name
屬性(假設參數 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.