在迭代之前清除数组的最佳位置?



编辑:我相信我在尝试删除重复项时走错了路,需要清除数组。

下面是示例代码。我在找一个最好的地方来清理家长。子目录数组。

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:[]}];
// create flat list
const tmp = mainArray.concat(directories);
tmp.forEach(directory => {
const parent = tmp.find(item => item.Id === directory.ParentId);
if(parent) {
parent.SubDirectories = parent.SubDirectories || [];
parent.SubDirectories.push(directory)
}
});
console.log(mainArray)

我的尝试,但是,它在重建JSON之前删除了顶部项。

tmp.forEach((directory) => {
const parent = tmp.find((item) => item.Id === directory.ParentFk);
if (parent) {
parent.SubDirectories = parent.SubDirectories || [];
const found = parent.SubDirectories.some((el) => el.Id === directory.Id);
if (!found) {
parent.SubDirectories.push(directory);
} else {
parent.SubDirectories = [];
}
}
}, []);

就这么简单?

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=>x.Id===directories[index].Id))
directories.splice(index,1)
}
console.log( directories )
.as-console-wrapper {max-height: 100%!important;top:0 }

你可以这样做:

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)

最新更新