簡體   English   中英

將項目添加到特定索引處的嵌套數組

[英]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.

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