JavaScript数组处理

var nodeLists = ["/data1/chenleileitest/1T/"]

如何快速将上述数组变换成如下的格式

["/data1/","/data1/chenleileitest/","/data1/chenleileitest/1T/"]

我想的是使用split对数组元素划分,然后再拼接,但这是对数组元素只有一个的情况比较好处理,如果数组的元素比较多的情况呢?

["/data1/chenleileitest/1T/","/boot/gurb2/themes/system/","/sys/dev/block/8:16/device/"]

将其转换成如下形式

["/data1/","/data1/chenleileitest/","/data1/chenleileitest/1T/","/boot/","/boot/gurb2/","/boot/gurb2/themes/","/boot/gurb2/themes/system/","/sys/","/sys/dev/","/sys/dev/block/","/sys/dev/block/8:16/","/sys/dev/block/8:16/device/",]
var nodeList  = [];
nodeList = nodeLists.map(function(value, index, array) {
            return '/'+value
          }).filter(function(item,index, array){
            return item !== '/'
          })

得到的结果是:

["/data1", "/chenleileitest", "/1T"]

实现想要的结果需要,第一的加上第二个,第一个加第二个加第三个,组成最终想要的结果

阅读 3.1k
5 个回答

思路很简单,对数组中的某一项,都先进行拆分,然后每拼接一个路径,就存储一次,直到路径拼接完成

var arr = ["/data1/chenleileitest/1T/","/boot/gurb2/themes/system/","/sys/dev/block/8:16/device/"];

function ss(arrs){
    let result = [];

    // 数组中的每个路径
    arrs.map((item)=>{
        let s = '/',
            res = [];

        item.split('/').map((_)=>{
            if(_){
                // 拼接路径,并把每次拼接完成的路径存储到res中
                s += _+'/';
                res.push(s);
            }
        });

        // 把数组中每个拼接的路径都存储到总数组中
        result = result.concat(res);
    });
    return result;
}
ss(arr);

用单个元素的方法在外面再循环一次不就行了吗

    var nodeLists = ['/Atest1/Atest2/Atest3/','/Btest1/Btest3/','/Ctest1/Ctest2/Ctest3/Ctest4/'];

    function strToArr(str){
        var arr = [];
        if(str[0] === '/' && str[str.length-1] === '/'){
            for(var i = 1; i < str.length; i++){
                if(str[i] === '/'){
                    arr.push(str.slice(0,i+1));
                }
            }
        }
        return arr;
    }
    console.log(strToArr(nodeLists[0]));

    function nodeSplit(arr){
        var resultArr = [];
        arr.forEach(function(item){
            resultArr = resultArr.concat(strToArr(item));
        });
        return resultArr;
    }

    console.log(nodeSplit(nodeLists));

建议不要使用数组来储存数据,其实我猜想你的本意是想要一个dom类的数据类型,那何不用对象来操作呢,直接对每个字符串进行操作,转成一个类似dom的数组,方法思路也现成,就是dom解析。

跟前面的思路基本一致,ES3/ES5版本

var data = ["/data1/chenleileitest/1T/", "/boot/gurb2/themes/system/", "/sys/dev/block/8:16/device/"];

var result = [];

for(var i=0,len=data.length;i<len;i++){
    var item = data[i].split('/').slice(1, this.length - 1);
    for(var j=0,len02=item.length;j<len02;j++){
        result.push('/'+item.slice(0, j+1).join('/')+'/');
    }
}
    
console.log(result)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题