javascript - Javascript 聚合
问题描述
我需要 javascript 方面的帮助。我需要删除已经在路径中的对象。
如您所见,有 3 个路径属性。
1) golang 2) 根目录/DCL/JAVA 3) 根目录/DCL/JAVA/JAVA1/JAVA2
point 2 JAVA 是 JAVA 2 文件夹的根目录。我需要从数组中删除整个对象。
物体可以在任何位置。
[
{
level: '0',
paths: 'golang',
name: 'golang',
updatedOn: 1998902546,
type: 'folder',
uuid: 'cd315c90-a9f8-48d9-9aed-a97b246b27e9',
createdOn: 1998902546,
elementType: 'folder'
},
{
level: '4', //. remove this object in an array because Root/BCL/JAVA/JAVA1/JAVA2 (JAVA2)is a child of JAVA -> Root/BCL/JAVA
paths: 'Root/BCL/JAVA/JAVA1/JAVA2',
name: 'JAVA2',
type: 'folder',
elementType: 'folder',
uuid: 'fe32e4b8-37be-4416-b129-852da83f5549',
createdOn: 2113950571
},
{
level: '2',
paths: 'Root/BCL/JAVA',
name: 'JAVA',
updatedOn: 2039112906,
type: 'folder',
elementType: 'folder',
uuid: 'cd315c90-a9f8-48d9-9aed-a97b246b27e7',
creadedOn: 2039112906
}
]
// split the paths by "/" and pushed in another array to match
for (let i = 0; i < list.length; i += 1) {
const l = parseInt(list[i].level, 10)
let splitArr = [];
if (list[i].paths.length > 0) {
splitArr = list[i].paths.split('/');
arr2.push(splitArr)
} else {
arr2.push(list[i].paths)
}
}
不确定是否需要拆分。现在有点迷路了,请指导。
解决方案
过滤是否可以在任何其他路径的位置 0 找到字符串。
您没有指定如果路径相同会发生什么,但这只会保留第一个。
data = [
{
level: '0',
paths: 'golang',
name: 'golang',
updatedOn: 1998902546,
type: 'folder',
uuid: 'cd315c90-a9f8-48d9-9aed-a97b246b27e9',
createdOn: 1998902546,
elementType: 'folder'
},
{
level: '2',
paths: 'Root/BCL/JAVA',
name: 'JAVA',
updatedOn: 2039112906,
type: 'folder',
elementType: 'folder',
uuid: 'cd315c90-a9f8-48d9-9aed-a97b246b27e7',
createdOn: 2039112906
},
{
level: '4',
paths: 'Root/BCL/JAVA/JAVA1/JAVA2',
name: 'JAVA2',
type: 'folder',
elementType: 'folder',
uuid: 'fe32e4b8-37be-4416-b129-852da83f5549',
createdOn: 2113950571
},
{
level: '2',
paths: 'Root/BCL/JAVA',
name: 'JAVA',
updatedOn: 2039112906,
type: 'folder',
elementType: 'folder',
uuid: 'cd315c90-a9f8-48d9-9aed-a97b246b27e7',
createdOn: 2039112906
},
{
level: '4',
paths: 'Root/BCL/JAVA/JAVA1/JAVA2',
name: 'JAVA2',
type: 'folder',
elementType: 'folder',
uuid: 'x',
createdOn: 2113950571
},
{
level: '2',
paths: 'Root/BCL/JAVA',
name: 'JAVA',
updatedOn: 2039112906,
type: 'folder',
elementType: 'folder',
uuid: 'cd315c90-a9f8-48d9-9aed-a97b246b27e7',
createdOn: 2039112906
}
]
console.log(
data.filter((p,i)=>data.every((x,j)=>x===p||!p.paths.startsWith(x.paths)||(x.paths===p.paths&&i>j)))
)
推荐阅读
- firebase - 发送带有通用消息的推送通知
- jupyter-notebook - 在 jupyter 上的系统文件夹中找不到文件
- mysql - MySQL Join 有几个 CASE WHEN
- ios - AudioComponentGetIcon 在 Catalyst 上不可用(iOS 到 macOS 移植)
- c# - 如何将 ScrollView 内的视觉元素 HeightRequest 绑定为等于页面的高度?
- reactjs - 反应钩子相当于componentDidCatch?
- python - 执行 os.system cmd 时隐藏弹出窗口
- c - 启用模拟以在 C 中对库进行单元测试
- jquery - Swiper分页不显示
- c++ - std::accumulate 有参考?