编辑代码

import _ from 'lodash'
//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
const areaDataInfo=[
    {
        "menuRecoilId": "menu@1718816246814466048(1752171186542493696)",
        "areaNodeId": "area@1718816246827048961()|menu@1718816246814466048(1752171186542493696)",
        "areaItem": {
            "areaName": "区域:流水线_菜单id入参",
            "areaUkid": "1705395724894310400",
            "logistAreaUkid": "1718816246827048961"
        },
        "outsideAreaItemList": [],
        "primaryGroupIdsList": []
    },
    {
        "menuRecoilId": "menu@1718816246814466048(1752171186542493696)",
        "areaNodeId": "area@1718816246822854656()|menu@1718816246814466048(1752171186542493696)",
        "areaItem": {
            "areaName": "区域:流水线_区域id入参",
            "areaUkid": "1699308202510385152",
            "logistAreaUkid": "1718816246822854656"
        },
        "outsideAreaItemList": [],
        "primaryGroupIdsList": []
    },
    {
        "menuRecoilId": "menu@1718816246814466048(1752171186542493696)",
        "areaNodeId": "area@1718871069979041793()|menu@1718816246814466048(1752171186542493696)",
        "areaItem": {
            "areaName": "修改指令参数",
            "areaUkid": "1718871069979041792",
            "logistAreaUkid": "1718871069979041793",
            "subAreas": [
                {
                    "areaName": "修改指令字段逻辑关系",
                    "areaUkid": "1749985876505243648",
                    "logistAreaUkid": "1749986011406643200"
                },
                {
                    "areaName": "操作栏区域_2",
                    "areaUkid": "1717465033023930368",
                    "logistAreaUkid": "1750039760066027520",
                    "subAreas": [
                        {
                            "areaName": "增加一行区域_2",
                            "areaUkid": "1717466291348684800",
                            "logistAreaUkid": "1727969233059074048",
                        },
                        {
                            "areaName": "删除区域_2",
                            "areaUkid": "1717467103810535424",
                            "logistAreaUkid": "1727974201233231872",
                        }
                    ]
                }
            ],
            "tableUkids": "32102140#ta"
        },
        "outsideAreaItemList": [],
        "primaryGroupIdsList": []
    },
    {
        "menuRecoilId": "menu@1718816246814466048(1752171186542493696)",
        "areaNodeId": "area@1718910209869209600()|menu@1718816246814466048(1752171186542493696)",
        "areaItem": {
            "areaName": "新增指令参数",
            "areaUkid": "1717738606137425920",
            "logistAreaUkid": "1718910209869209600",
            "subAreas": [
                {
                    "areaName": "新增指令字段逻辑关系",
                    "areaUkid": "1727967746262192128",
                    "logistAreaUkid": "1727968082561486848",
                },
                {
                    "areaName": "操作栏区域_2",
                    "areaUkid": "1717465033023930368",
                    "logistAreaUkid": "1727968843655696384",
                    "subAreas": [
                        {
                            "areaName": "增加一行区域_2",
                            "areaUkid": "1717466291348684800",
                            "logistAreaUkid": "1727969233059074048"
                          
                        },
                        {
                            "areaName": "删除区域_2",
                            "areaUkid": "1717467103810535424",
                            "logistAreaUkid": "1727974201233231872",
                          
                        }
                    ]
                }
            ],
            "tableUkids": "32102140#ta"
        },
        "outsideAreaItemList": [],
        "primaryGroupIdsList": []
    },
    {
        "menuRecoilId": "menu@1718816246814466048(1752171186542493696)",
        "areaNodeId": "area@1718900731539087360(-1706755683543,2199)|menu@1718816246814466048(1752171186542493696)",
        "areaItem": {
            "areaName": "通用删除按钮区域",
            "areaUkid": "1689116112988119040",
            "logistAreaUkid": "1718900731539087360"
        },
        "outsideAreaItemList": [
            {
                "areaName": "操作栏区域",
                "areaUkid": "1714528533995044864",
                "logistAreaUkid": "1718900142663000064",
               
                "subAreas": [
                    {
                        "areaName": "新增一行按钮区域",
                        "areaUkid": "1689117287179329536",
                        "logistAreaUkid": "1718900406476333056"
                   
                    },
                    {
                        "areaName": "通用删除按钮区域",
                        "areaUkid": "1689116112988119040",
                        "logistAreaUkid": "1718900731539087360"
                       
                    }
                ]
            }
        ],
        "primaryGroupIdsList": [
            "-1706755683543,2199"
        ]
    },
    {
        "menuRecoilId": "menu@1718816246814466048(1752171186542493696)",
        "areaNodeId": "area@1749986011406643200(1752625274254245888)|menu@1718816246814466048(1752171186542493696)",
        "areaItem": {
            "areaName": "修改指令字段逻辑关系",
            "areaUkid": "1749985876505243648",
            "logistAreaUkid": "1749986011406643200"
        },
        "outsideAreaItemList": [
            {
                "areaName": "修改指令参数",
                "areaUkid": "1718871069979041792",
                "logistAreaUkid": "1718871069979041793",
                "subAreas": [
                    {
                        "areaName": "修改指令字段逻辑关系",
                        "areaUkid": "1749985876505243648",
                        "logistAreaUkid": "1749986011406643200",
                    },
                    {
                        "areaName": "操作栏区域_2",
                        "areaUkid": "1717465033023930368",
                        "logistAreaUkid": "1750039760066027520",
                        "subAreas": [
                            {
                                "areaName": "增加一行区域_2",
                                "areaUkid": "1717466291348684800",
                                "logistAreaUkid": "1727969233059074048",
                            },
                            {
                                "areaName": "删除区域_2",
                                "areaUkid": "1717467103810535424",
                                "logistAreaUkid": "1727974201233231872",
                            }
                        ]
                    }
                ],
                "tableUkids": "32102140#ta"
            }
        ],
        "primaryGroupIdsList": [
            "1752625274254245888"
        ]
    },
    {
        "menuRecoilId": "menu@1718816246814466048(1752171186542493696)",
        "areaNodeId": "area@1749986011406643200(1752625311386419200)|menu@1718816246814466048(1752171186542493696)",
        "areaItem": {
            "areaName": "修改指令字段逻辑关系",
            "areaUkid": "1749985876505243648",
            "logistAreaUkid": "1749986011406643200"
        },
        "outsideAreaItemList": [
            {
                "areaName": "修改指令参数",
                "logistAreaUkid": "1718871069979041793",
                "subAreas": [
                    {
                        "areaName": "修改指令字段逻辑关系",
                        "areaUkid": "1749985876505243648",
                        "logistAreaUkid": "1749986011406643200"
                    },
                    {
                        "areaName": "操作栏区域_2",
                        "logistAreaUkid": "1750039760066027520",
                        "subAreas": [
                            {
                                "areaName": "增加一行区域_2",
                                "areaUkid": "1717466291348684800",
                                "logistAreaUkid": "1727969233059074048"
                            },
                            {
                                "areaName": "删除区域_2",
                                "areaUkid": "1717467103810535424",
                                "logistAreaUkid": "1727974201233231872"
                            }
                        ]
                    }
                ],
                "tableUkids": "32102140#ta"
            }
        ],
        "primaryGroupIdsList": [
            "1752625311386419200"
        ]
    },
    {
        "menuRecoilId": "menu@1718816246814466048(1752171186542493696)",
        "areaNodeId": "area@1727974201233231872(1752625274254245888,-1706755684577,2199)|menu@1718816246814466048(1752171186542493696)",
        "areaItem": {
            "areaName": "删除区域_2",
            "areaUkid": "1717467103810535424",
            "logistAreaUkid": "1727974201233231872"
        },
        "outsideAreaItemList": [
            {
                "areaName": "修改指令参数",
                "areaUkid": "1718871069979041792",
                "logistAreaUkid": "1718871069979041793",
                "subAreas": [
                    {
                        "areaName": "修改指令字段逻辑关系",
                        "areaUkid": "1749985876505243648",
                        "logistAreaUkid": "1749986011406643200"
                    },
                    {
                        "areaName": "操作栏区域_2",
                        "areaUkid": "1717465033023930368",
                        "isInitLoad": 1,
                        "isInvisible": 0,
                        "isLoop": 0,
                        "logistAreaUkid": "1750039760066027520",
                        "subAreas": [
                            {
                                "areaName": "增加一行区域_2",
                                "areaUkid": "1717466291348684800",
                                "logistAreaUkid": "1727969233059074048",
                            },
                            {
                                "areaName": "删除区域_2",
                                "areaUkid": "1717467103810535424",
                                "logistAreaUkid": "1727974201233231872"
                            }
                        ]
                    }
                ],
                "tableUkids": "32102140#ta"
            },
            {
                "areaName": "操作栏区域_2",
                "areaUkid": "1717465033023930368",
                "logistAreaUkid": "1750039760066027520",
                "subAreas": [
                    {
                        "areaName": "增加一行区域_2",
                        "areaUkid": "1717466291348684800",
                        "logistAreaUkid": "1727969233059074048",
                    },
                    {
                        "areaName": "删除区域_2",
                        "areaUkid": "1717467103810535424",
                        "logistAreaUkid": "1727974201233231872",
                    }
                ]
            }
        ],
        "primaryGroupIdsList": [
            "1752625274254245888",
            "-1706755684577,2199"
        ]
    },
    {
        "menuRecoilId": "menu@1718816246814466048(1752171186542493696)",
        "areaNodeId": "area@1727974201233231872(1752625311386419200,-1706755684587,2199)|menu@1718816246814466048(1752171186542493696)",
        "areaItem": {
            "areaName": "删除区域_2",
            "areaUkid": "1717467103810535424",
            "logistAreaUkid": "1727974201233231872",
        },
        "outsideAreaItemList": [
            {
                "areaName": "修改指令参数",
                "areaUkid": "1718871069979041792",
                "logistAreaUkid": "1718871069979041793",
                "subAreas": [
                    {
                        "areaName": "修改指令字段逻辑关系",
                        "areaUkid": "1749985876505243648",
                        "logistAreaUkid": "1749986011406643200",
                    },
                    {
                        "areaName": "操作栏区域_2",
                        "areaUkid": "1717465033023930368",
                        "logistAreaUkid": "1750039760066027520",
                        "subAreas": [
                            {
                                "areaName": "增加一行区域_2",
                                "areaUkid": "1717466291348684800",
                                "logistAreaUkid": "1727969233059074048",
                            },
                            {
                                "areaName": "删除区域_2",
                                "areaUkid": "1717467103810535424",
                                "logistAreaUkid": "1727974201233231872",
                            }
                        ]
                    }
                ],
                "tableUkids": "32102140#ta"
            },
            {
                "areaName": "操作栏区域_2",
                "logistAreaUkid": "1750039760066027520",
                "subAreas": [
                    {
                        "areaName": "增加一行区域_2",
                        "areaUkid": "1717466291348684800",
                        "logistAreaUkid": "1727969233059074048",
                    },
                    {
                        "areaName": "删除区域_2",
                        "areaUkid": "1717467103810535424",
                        "logistAreaUkid": "1727974201233231872",
                    }
                ]
            }
        ],
        "primaryGroupIdsList": [
            "1752625311386419200",
            "-1706755684587,2199"
        ]
    }
]

const condition={
    "targetMenuRecoilId": "menu@1718816246814466048(1752171186542493696)",
    "targetAreaUkid": "1718871069979041792",
    "sourcePrimaryGroupIdsList": [
        "-1706755683543,2199",
        "1688758431819468800,1688758431819468800"
    ]
}

const findTargetArea = (
  dataList: any[],
  conditions: {
    targetMenuRecoilId?: string;
    targetAreaUkid?: string;
    targetScopeId?: string;
    sourcePrimaryGroupIdsList?: string[];
  },
) => {
  const {
    targetMenuRecoilId: menuRecoilId,
    targetAreaUkid,
    targetScopeId,
    sourcePrimaryGroupIdsList,
  } = conditions;
  if (!menuRecoilId || !targetAreaUkid || !sourcePrimaryGroupIdsList) return undefined;
  if (_.isEmpty(dataList)) return undefined;

  if (targetScopeId) {
    const scopeAreaInfo = _.find(
      dataList,
      (one) => one?.areaItem?.logistAreaUkid === targetScopeId,
    );
    // 1、查找目标范围区域(通过对比logistAreaUkid),找到后再对比areaUkid,相等即找到区域
    if (scopeAreaInfo?.areaItem?.areaUkid === targetAreaUkid) {
      return scopeAreaInfo;
    } else if (scopeAreaInfo && targetScopeId) {
      // 2.1、 提取出目标范围区域的子孙区域(区域的外部层级区域若有logistAreaUkid是目标范围的)
      // 2.2、按照子孙层级深度(outsideAreaItemList?.length)排序
      const childAreaInfoList = _.sortBy(
        _.filter(dataList, (one) => {
          const idx = _.findIndex(
            one?.outsideAreaItemList,
            (one2) => one2?.logistAreaUkid === targetScopeId,
          );
          return idx > -1;
        }),
        (one) => one?.outsideAreaItemList?.length,
      );

      // 3、在子孙区域里,对比areaUkid和targetAreaUkid就好
      const scopeChildAreaInfo = _.find(
        childAreaInfoList,
        (one) => one?.areaItem?.areaUkid === targetAreaUkid,
      );
      if (scopeChildAreaInfo) {
        return scopeChildAreaInfo;
      }

      // 4、【注意】目前是为了找到联动的目标区域,若范围id设定了,但是未找到目标区域,还会继续去全菜单查找
    }
  }
  const idList = [...sourcePrimaryGroupIdsList];
  for (let i = 0; i <= (idList ? idList.length : 0); i++) {
    const currentIdList = idList ? idList.slice(0, idList.length - i) : [];
    let maxIdsListLength = currentIdList?.length;
    const filteredList = _.filter(dataList, (one) => {
      maxIdsListLength = Math.max(
        maxIdsListLength,
        one?.primaryGroupIdsList ? one?.primaryGroupIdsList?.length : 0,
      );

      // console.log('menuRecoilId isEqual=', one.menuRecoilId === menuRecoilId);
      return (
        one.menuRecoilId === menuRecoilId &&
        _.isEqual(one?.primaryGroupIdsList!.slice(0, currentIdList.length), currentIdList)
      );
    });

    // console.log('currentIdList的子孙:', { dataList, currentIdList, filteredList});

    for (let j = currentIdList?.length; j <= maxIdsListLength; j++) {
      const targetArea = _.find(filteredList, (one) => {
        return one?.areaItem?.areaUkid === targetAreaUkid && one?.primaryGroupIdsList!.length === j;
      });
      if (targetArea) return targetArea;
    }
  }
  return undefined
};


const target = findTargetArea(areaDataInfo,condition);
console.log(target,'target')