試圖改進這段代碼,防止推送()時物件陣列中的重復。
const mainArray = [{Id:1, Name: "test",SubDirectoryCount:10,Files:[]}】。]
const directories = [{Id:56, Name: "Client 2",SubDirectoryCount: 1,ParentId:1, Files: []},{Id:53, Name: "Client 3",SubDirectoryCount:1, ParentId: 1,Files:[]}, {Id: 50,Name:"Client 4", SubDirectoryCount: 1,ParentId:1, Files: []},{Id:48, Name: "Client 5",SubDirectoryCount:1, ParentId: 53,Files:[]}, {Id: 47,Name:"Client 5", SubDirectoryCount。 1,ParentId:53, Files: []},{Id:49, Name: "Client 5",SubDirectoryCount: 1,ParentId:53,Files:[]}】。]
//創建平面串列。
const tmp = mainArray.concat(directories)。
tmp.forEach(directory => {
const parent = tmp.find(item =>/span> item. Id === directory.ParentId)。)
if(parent) {
parent.SubDirectories = parent.SubDirectories || [] 。
parent.SubDirectories.push(目錄)。
}
});
console.log(mainArray)
我的嘗試,但是,當目錄被更新為新物件時,它將不再構建。基本上,我只是在檢查它是否已經在陣列中,而不是推送。
const mainArray = [{Id:1, Name: "test",SubDirectoryCount:10,Files:[]}】。]
const directories = [{Id:56, Name: "Client 2",SubDirectoryCount: 1,ParentId:1, Files: []},{Id:53, Name: "Client 3",SubDirectoryCount:1, ParentId: 1,Files:[]}, {Id: 50,Name:"Client 4", SubDirectoryCount: 1,ParentId:1, Files: []},{Id:48, Name: "Client 5",SubDirectoryCount:1, ParentId: 53,Files:[]}, {Id: 47,Name:"Client 5", SubDirectoryCount。 1,ParentId:53, Files: []},{Id:49, Name: "Client 5",SubDirectoryCount: 1,ParentId:53,Files:[]}】。]
const tmp = mainArray.concat(directories)。
tmp.forEach(directory => {
const parent = tmp.find(item =>/span> item. Id === directory.ParentId)。)
if(parent) {
parent.SubDirectories = parent.SubDirectories || [] 。
const found = parent.SubDirectories. some(el => el.Id == directory.Id)
if (!found) parent.SubDirectories.push(目錄)。
}
});
console.log(mainArray)
在這行代碼中,是否有辦法使用include()并檢查是否存在而不添加到父級?
const parent = tmp. find(item => item.Id == directory.ParentId) 。
原來的問題
而且當你點擊另一個切換時,它會重復所有的東西
uj5u.com熱心網友回復:
簡單地說,就是
。 。const directories =
[{ Id: 56, Name: 'Client 2', SubDirectoryCount: 1, ParentId: 1, Files: [] }
, { Id: 53, Name: 'Client 3', SubDirectoryCount: 1, ParentId: 1, Files: [] }
, { Id: 50, Name: 'Client 4', SubDirectoryCount: 1, ParentId: 1, Files: [] }
, { Id: 48, Name: 'Client 5', SubDirectoryCount: 1, ParentId: 53, Files: [] }
, { Id: 47, Name: 'Client 5', SubDirectoryCount: 1, ParentId: 53, Files: [] }
, { Id: 47, Name: 'Client 5', SubDirectoryCount: 1, ParentId: 53, Files: [] }
]
for (let index= directories.length; --index;)
{
if (index > directories.findIndex(x=>/span>x. Id====directories[index].Id)
directories.splice(index,1)
}
console.log( directories )
.as-console-wrapper {max-height。100%!important;top:0 }
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
你可以做到:
const directories = [{Id: 56, Name: 'Client 2', SubDirectoryCount: 1, ParentId: 1, Files: []}, {Id: 53, Name: 'Client 3', SubDirectoryCount: 1, ParentId: 1, Files: []}, {Id: 50, Name: 'Client 4', SubDirectoryCount: 1, ParentId: 1, Files: []}, {Id: 48, Name: 'Client 5', SubDirectoryCount: 1, ParentId: 53, Files: []}, {Id: 47, Name: 'Client 5', SubDirectoryCount: 1, ParentId: 53, Files: []}, {Id: 47, Name: 'Client 5', SubDirectoryCount: 1, ParentId: 53, Files: []}]
const result = Object.values(directories。 reduce((a, c) =>(a[c. Id] = a[c.Id] || c, a), {})
console.log(result)
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/331523.html
標籤:
上一篇:我想知道如何才能在執行下一行代碼之前等待回傳函式發送資料?
下一篇:如何獲得NodeList中的元素

