87,904
社区成员
发帖
与我相关
我的任务
分享
!repeatList && result.push([result.length + 1,parentId,tempArr[k]]);
//改成:
!repeatList && result.push([result.length + 1,parentId,tempArr[k].lastIndexOf('.')!=-1?arr[i]:tempArr[k]]);
<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
textarea{
font-size: 16px;
outline: none;
border-radius: 5px;
border:1px solid #ccc;
width: 50%;
height: 80px;
}
.button{
width: 60px;
height: 30px;
line-height: 30px;
text-align: center;
border-radius: 5px;
border: 1px solid #ccc;
cursor: pointer;
font-size: 13px;
}
.button:hover{
background: #eee;
}
</style>
</head>
<body>
<textarea id="text"></textarea>
<div class="button" onclick="analysis()">解析</div>
<div id="result"></div>
<script>
// const s="jar.bat,temp/,temp/aa/,temp/jar.bat,temp/rr.txt,temp/aa/44.txt,temp/aa/bb/";
const s="1.zip(1002.00B),1/jar.bat(26.00B),1/temp/jar.bat(26.00B),1/temp/rr.txt(0 B),1/temp/aa/44.txt(0 B)";
document.querySelector('#text').value = s;
function analysis(){
let text = document.querySelector('#text').value;
let arr = text.split(','),//将源字符串以逗号隔开,转换成数组
result = [];//最终输出的结果集
/** 遍历转换的数组 **/
for(var i in arr){
var tempArr = arr[i].split('/'),//将数组的每一项用斜杠拆分
len = tempArr.length;//每一项拆分后数组的长度
if(len > 1){//如果长度大于1,表示有二级或以上目录
for(var k in tempArr){
k = k * 1;//乘以1是将k转化成数字
//查找最终数组中是否已经存在当前项(tempArr[k - 1]表示取上一个“/”中的内容,即父及目录)
let aa = result.find(function(x){return x[2]==tempArr[k - 1]});
//存在,则该项的父及id就是上一个目录的id,不存在,则默认为0
let parentId = aa ? aa[0] : 0;
if(tempArr[k]){//该判断是为了防止空数据出现,比如:temp/,以斜杠拆分后边就多了个空字符串
//如果当前项名称(tempArr[k])跟最终结果的名称相同,并且父及id也相同,则判定重复
var repeatList = result.find(function(x){return x[2]==tempArr[k] && x[1]==parentId})
//如果不重复,则添加到最终的结果集中
!repeatList && result.push([result.length + 1,parentId,tempArr[k]]);
}
}
}else{//只有一级目录,直接添加到结果集
result.push([result.length + 1,0,tempArr[0]]);
}
}
result = JSON.stringify(result);
let html = `<p>源字符串:${text}</p><p>输出结果:${result}</p>`;
document.querySelector('#result').innerHTML = html;
}
</script>
</body>
</html>
const s="jar.bat,temp/,temp/aa/,temp/jar.bat,temp/rr.txt,temp/aa/44.txt,temp/aa/bb/";
let arr = s.split(','),//将源字符串以逗号隔开,转换成数组
result = [];//最终输出的结果集
/** 遍历转换的数组 **/
for(var i in arr){
var tempArr = arr[i].split('/'),//将数组的每一项用斜杠拆分
len = tempArr.length,//每一项拆分后数组的长度
id = result.length + 1;//生成id编号:取最终输出的数组长度+1 为新的id
if(len > 1){//如果长度大于1,表示有二级或以上目录
for(var k in tempArr){
k = k * 1;//乘以1是将k转化成数字
//es6语法,查找最终数组中是否已经存在当前项(tempArr[k - 1]表示取上一个“/”中的内容,即父及目录)
let aa = result.find(function(x){return x[2]==tempArr[k - 1]});
//存在,则该项的父及id就是上一个目录的id,不存在,则默认为0
let parentId = aa ? aa[0] : 0;
if(tempArr[k]){//该判断是为了防止空数据出现,比如:temp/,以斜杠拆分后边就多了个空字符串
//如果当前项名称(tempArr[k])跟最终结果的名称相同,并且父及id也相同,则判定重复
var repeatList = result.find(function(x){return x[2]==tempArr[k] && x[1]==parentId})
//如果不重复,则添加到最终的结果集中
!repeatList && result.push([id,parentId,tempArr[k]]);
}
}
}else{//只有一级目录,直接添加到结果集
result.push([id,0,tempArr[0]]);
}
}
console.log(JSON.stringify(result));
const s="jar.bat,temp/,temp/aa/,temp/jar.bat,temp/rr.txt,temp/aa/44.txt,temp/aa/bb/";
let arr = s.split(','),//将源字符串以逗号隔开,转换成数组
result = [];//最终输出的结果集
/** 遍历转换的数组 **/
for(var i in arr){
var tempArr = arr[i].split('/'),//将数组的每一项用斜杠拆分
len = tempArr.length,//每一项拆分后数组的长度
id = result.length + 1;//生成id编号:取最终输出的数组长度+1 为新的id
if(len > 1){//如果长度大于1,表示有二级或以上目录
for(var k in tempArr){
k = k * 1;//乘以1是将k转化成数字
//es6语法,查找最终数组中是否已经存在当前项(tempArr[k - 1]表示取上一个“/”中的内容,即父及目录)
let aa = result.find(function(x){return x[2]==tempArr[k - 1]});
//存在,则该项的父及id就是上一个目录的id,不存在,则默认为0
let parentId = aa ? aa[0] : 0;
if(tempArr[k]){//该判断是为了防止空数据出现,比如:temp/,以斜杠拆分后边就多了个空字符串
//如果当前项名称(tempArr[k])跟最终结果的名称相同,并且父及id也相同,则判定重复
var repeatList = result.find(function(x){return x[2]==tempArr[k] && x[1]==parentId})
//如果不重复,则添加到最终的结果集中
!repeatList && result.push([id,parentId,tempArr[k]]);
}
}
}else{//只有一级目录,直接添加到结果集
result.push([id,0,tempArr[0]]);
}