我正在编写一个脚本,其中用户选择目录,然后将这些目录存储在数组属性中,以便可以递归抓取它们。
{
"archives": [
"C:\\AMD\\Packages",
"C:\\Users",
"C:\\Windows",
"D:\\",
"E:\\Pictures\\Birthday"
]
}
我显然不想存储重复的路径或其他路径包含的路径。例如,如果用户要选择一个新文件夹添加到数组中,E:\\Pictures,E:\\Pictures\\Birthday则将被丢弃并替换为它,因为E:\\Pictures包含E:\\Pictures\\Birthday。
{
"archives": [
"C:\\AMD\\Packages",
"C:\\Users",
"C:\\Windows",
"D:\\",
"E:\\Pictures"
]
}
我知道这可以通过解析所有正在考虑的值(即['C:', 'AMD', 'Packages'], [...], ...等)然后将它们相互比较来完成。然而,这似乎非常密集,尤其是当路径数组变得更大并且目录路径更长时。
您也可以通过将字符串与includes. 例如,如果A包含B或B包含A,则将它们拆分,并丢弃长度较长的。
for (const dir of dirs){
if (newPath.includes(dir) || dir.includes(newPath)){
if (newPath.split('\\') < dir.split('\\')){
// remove dir from json object and replace it with newPath
}
} else {
pathArray.push(dir)
}
}
阅读以下答案之一后,我才意识到该includes方法遇到了比较相似但独特的路径即C:\Users和 的问题C:\User。
虽然必须有更好的方法来做到这一点?
慕桂英4014372
四季花海
相关分类