多维数组通过子元素 获取父元素集合以及父元素对应数组的集合

function getCascaderFullValue(cascader, id) {

  let cascaderFullValue = [id];
  _getParentId(cascaderFullValue, cascader,cascader, id);

  return cascaderFullValue;

  /**
   * 
   * @param {Array} cascaderFullValue value for return
   * @param {Array} cascader value for loop
   * @param {Array} _cascader value of original
   * @param {number} _id  value of bottom item
   */
  function _getParentId(cascaderFullValue, cascader, _cascader, _id) {
    if (!Array.isArray(cascader)) return;
    
    for (let cascaderItem of cascader) {
      if (!Array.isArray(cascaderItem.routes)) continue;

      let index = cascaderItem.routes.findIndex(item => item.path === _id); //找到返回该元素的位置 有值为0 没有值返回-1
      if (index >= 0) {
        cascaderFullValue.unshift(cascaderItem.path); // 在数组开头添加元素
         console.log(_cascader,'_cascader',cascaderItem,_cascader.findIndex(item => item.path === cascaderItem.path))
        if(_cascader.findIndex(item => item.path === cascaderItem.path) < 0) //is original item
          _getParentId(cascaderFullValue, _cascader, _cascader,cascaderItem.path);
      } else {
        _getParentId(cascaderFullValue, cascaderItem.routes, _cascader,_id);
      }
    }
  }
}

let json=  {
"data":[
        {
            "path":7,
            "label":"初级会计师22",
            "routes":[
                {
                    "path":11,
                    "label":"初级会计实务",
                    "routes":[
                        {
                            "path":13,
                            "label":"初级会计实务试卷模块",
                            "routes":null
                        }
                    ]
                }
            ]
        },
        {
            "path":6,
            "label":"审计师",
            "routes":[
                {
                    "path":12,
                    "label":"审计与考核",
                    "routes":[
                        {
                            "path":14,
                            "label":"审计与考核模块!!",
                            "routes":null
                        }
                    ]
                },
                {
                    "path":10,
                    "label":"审计理论",
                    "routes":[
                         {
                            "path":15,
                            "label":"审计模块!222!",
                            "routes":null
                        }
                    ]
                }
            ]
        }
    ]
}
const result = getCascaderFullValue(json.data,13);
console.log(result);//[6, 12, 14]
let currentItem= json.data.filter(item=>result.includes(item.path));
console.log(currentItem,'currentItem')

返回的currentItem:

posted on 2020-12-07 22:43  旋风小美女  阅读(692)  评论(0)    收藏  举报