gpt4 book ai didi

javascript - 确保不存在重复的目录路径

转载 作者:行者123 更新时间:2023-12-01 00:30:51 24 4
gpt4 key购买 nike

我正在编写一个脚本,其中用户选择目录,然后将其存储在数组属性中,以便可以递归地抓取它们。

{
"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:\UsersC:\用户

<小时/>

尽管必须有更好的方法来做到这一点?

最佳答案

此功能将为您提供您想要的结果。它首先查看存档中是否存在路径的父路径,如果存在,则不执行任何操作。如果没有,它会删除该路径的所有子路径,然后插入新路径。

更新

我在该函数中添加了一个 delim 输入,使其也可用于 unix/MacOS 样式的文件名。

let data = {
"archives": [
"C:\\AMD\\Packages",
"C:\\Users",
"C:\\Windows",
"D:\\",
"E:\\Pictures"
]
};

const add_to_archives = (path, data, delim) => {
// does the parent of this path already exist? if so, nothing to do
if (data.archives.reduce((c, v) =>
c || path.indexOf(v.slice(-1) == delim ? v : (v + delim)) === 0, false)) return data;
// not found. remove any children of this path
data.archives = data.archives.filter(v => v.indexOf(path.slice(-1) == delim ? path : (path + delim)) !== 0);
// and add the new path
data.archives.push(path);
return data;
}

add_to_archives("E:\\Pictures\\Too", data, "\\");
console.log(data);
add_to_archives("E:\\PicturesToo", data, "\\");
console.log(data);
add_to_archives("D:\\Documents", data, "\\");
console.log(data);
add_to_archives("C:\\AMD", data, "\\");
console.log(data);

data = {
"archives": [
"/var/www/html/site",
"/etc",
"/usr/tim",
"/bin"
]
};

add_to_archives("/var/www/html/site2", data, "/");
console.log(data);
add_to_archives("/etc/conf.d", data, "/");
console.log(data);
add_to_archives("/usr", data, "/");
console.log(data);
add_to_archives("/var/www/html", data, "/");
console.log(data);
.as-console-wrapper {
max-height: 100% !important;
}

关于javascript - 确保不存在重复的目录路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58552674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com