[英]Add item to nested array at specific index
我有一個這樣的數據結構:
[
{name: "Bob"},
{name: "Ashley"},
{name: "Jack", children: [
{name: "Sinclair"},
{name: "Laura"}
]},
{name: "Stuart", children: [
{name: "Trevor", children: [
{name: "Woody"},
{name: "Crystal"}
]},
{name: "Allen"}
]}
]
幾乎可以有無限的嵌套級別。
我正在嘗試做的事情:給定這個數據結構中的一個對象,我想在它之后添加另一個 object。 例如,如果給定名稱“Woody”,我插入的 object 需要在 Woody 和 Crystal 之間插入 go。
我已經有一種方法可以在給定名稱時遞歸地遍歷數據結構以找到 object(名稱在這種情況下是唯一的)。 我只是在尋找一種在嵌套 arrays 內的任意位置插入某些內容時修改整個數據結構的方法。
我能想到的唯一方法是首先使用JSON.stringify
展平整個數據結構,然后展平我要插入的 object,然后將其插入字符串中,然后將字符串轉換回 ZA8Z6.9331BD49EB6661 問題在於JSON.stringify 對於大型對象可能非常慢,並且性能是這里的優先事項。
使用遞歸 function 和一個循環搜索給定子數組中每個 object 的循環,您可以查找匹配的 object - 或者,如果該項目有children
children
const data = [ {name: "Bob"}, {name: "Ashley"}, {name: "Jack", children: [ {name: "Sinclair"}, {name: "Laura"} ]}, {name: "Stuart", children: [ {name: "Trevor", children: [ {name: "Woody"}, {name: "Crystal"} ]}, {name: "Allen"} ]} ]; const nameToFind = 'Sinclair'; const insert = (arr) => { for (let i = 0; i < arr.length; i++) { if (arr[i].name === nameToFind) { arr.splice(i + 1, 0, { name: 'newName' }); return true; } if (arr[i].children) { const found = insert(arr[i].children); if (found) return true; } } }; insert(data); console.log(data);
另一種選擇是使用findIndex
在數組中查找匹配項,如果找到則在索引處拼接項目,否則通過數組中的所有子項再次循環到 go ,但這需要對每個項目進行兩次迭代(並且如果性能是優先級for
循環是最快的)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.