zoukankan      html  css  js  c++  java
  • js 中数组级联组合

    //一级数组对象,根据key值组合多级
    //[{code1:'',code2''}]=>{code1:{code2:{code1:'',code2''}}}
    //[{code1:'',code2''}]=>[{code:'',children:[{code1:'',code2''}]}]
    //arrData:数组数据,arrCode:分级字段数组可多级

    
    
    function CascadeArr(arrData,arrCode) {
    let arrResult = [];
    let arrCodeObj = {};
    // console.log(JSON.parse(JSON.stringify(arrData)))
    // console.log(JSON.parse(JSON.stringify(arrCode)))
    for(let i = 0;i < arrData.length;i++){
    let item = arrData[i];
    for(let j = 0;j < arrCode.length;j++){
    getCodeCascade(arrCodeObj,0,j,arrCode.length-1);
    }
    //obj传入的每一级对象,
    // idx:分级数组code每一级都要从第一级开始循环添加,
    // idxlen:分级数组code下标(当前级别递归循环次数),
    // alllen:分级数组code长度(一共多少级),
    function getCodeCascade(obj, idx, idxlen,alllen) {
    if(idx < idxlen){
    if(!obj.hasOwnProperty(item[arrCode[idx]])){
    obj[item[arrCode[idx]]] = {};
    }
    getCodeCascade(obj[item[arrCode[idx]]],idx+1,idxlen,alllen);
    }else{
    if(idx === idxlen&&idx === alllen){
    if(!obj.hasOwnProperty(item[arrCode[idx]])){
    obj[item[arrCode[idx]]] = [];
    }

    obj[item[arrCode[idx]]].push(item);
    }else{
    if(!obj.hasOwnProperty(item[arrCode[idx]])){
    obj[item[arrCode[idx]]] = {};
    }
    }
    }
    }
    }
    // console.log(JSON.parse(JSON.stringify(arrCodeObj)))
    let arrCellWidth = [];//设置列宽所用数据element ui table 用来设置列宽
    //通过层级对象数据,获取层级数组
    let getCascadeArr = (objOrigin,level,parent) => {
    for(let k in objOrigin){
    let objItem = objOrigin[k];
    let obj = {
    id:this.$getGuid(),
    level:`${parseFloat(level)+1}`,
    children:[],
    };
    obj[arrCode[level]] = k;

    if(!Array.isArray(objItem)){
    if(parent){
    parent.children.push(obj);
    }
    getCascadeArr(objItem,parseFloat(level)+1,obj);
    }else{
    if(parent){
    let lastLevel = {
    id:this.$getGuid(),
    level:`${parseFloat(level)+1}`,
    children:[],
    };

    for(let l = 0;l < objItem.length;l++){
    let lastItem = objItem[l];
    if(!lastLevel.hasOwnProperty(arrCode[level])){
    lastLevel[arrCode[level]] = lastItem[arrCode[level]];
    }
    let findIdx = lastLevel.children.findIndex(val=>{
    return val[arrCode[level]] === lastItem[arrCode[level]];
    });
    if(findIdx === -1){
    lastItem = {
    id:this.$getGuid(),
    level:`${parseFloat(level)+2}`,
    ...objItem[l],
    };
    lastLevel.children.push(lastItem);
    }
    }
    // console.log(JSON.parse(JSON.stringify(lastLevel)))
    // console.log(JSON.parse(JSON.stringify(parent.children)))
    parent.children.push(lastLevel);
    arrCellWidth = arrCellWidth.concat(objItem);
    }else{
          if(arrCode.length===1){
            obj['children'] = objItem;
          }     
         }
    }
    arrCellWidth.push(obj);
    if(level === 0){
    arrResult.push(obj);
    }
    }
    };
    getCascadeArr(arrCodeObj,0);

    // console.log(JSON.parse(JSON.stringify(arrResult)))
    return {CascadeObj:arrCodeObj,CascadeArr:arrResult,arrCellWidth:arrCellWidth};
    }
     



  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    python中单下划线和双下划线的区别
    利用faker 模块创建测试数据
    分页器基本案例思路
    小提醒
  • 原文地址:https://www.cnblogs.com/xiongK/p/15066436.html
Copyright © 2011-2022 走看看