编辑代码

//输入多个端口组数组,端口组间存在2个或者以上端口相同,则认为这两个端口组互相关联,可以合并
function getMergePort(portTeamNum,portArr){
    if(portTeamNum<1 || portTeamNum>10){
        console.log("最终结果:",[[]])
        return null
    }
    let newPortArr = []
    let tempPortArr = Object.assign(portArr) //重复的端口组合并后需要删除,用来存放未合并的端口组
    for(let i = 0 ; i<portArr.length; i++){
        let isExist = tempPortArr.filter((item)=>{return JSON.stringify(item) == JSON.stringify(portArr[i]) })
        if(isExist && isExist.length>0){
            let currentPort=Array.from(new Set(portArr[i]))
            //1.获取两组需要判重的端口组
            let relatePort=currentPort //当前端口组
            let repartNum = 0 //重复次数
            let repartItem = [] //重复的端口组
            for(let j = i+1 ; j<portArr.length;j++){
                let nextPorts = Array.from(new Set(portArr[j])) //下一个端口组

                //2.判断端口组中有没相同的端口
                for(let n = 0; n<currentPort.length; n++){
                    let repeatePorts = nextPorts.filter((item)=>{
                        return currentPort[n] == item
                    }) 
                    if(repeatePorts && repeatePorts.length>0){
                        repartNum = repartNum+1
                        repartItem.push(nextPorts)
                    }
                }

            }

            //3.判断重复的元素是否大于等于2
            if(repartNum>=2){
                for(let x = 0; x< tempPortArr.length ; x++){
                    for(let y = 0;y<repartItem.length;y++){

                        if(JSON.stringify(tempPortArr[x]) === JSON.stringify(repartItem[y])){
                            tempPortArr.splice(x,1)
                            relatePort.push(...repartItem[y]) 
                        }
                    }
                }
            }

            if(relatePort && relatePort.length>0){
                relatePort = Array.from(new Set(relatePort))
                relatePort.sort(function(a,b){return a-b})
                newPortArr.push(relatePort)
            }else{
                newPortArr.push(currentPort)
            }
        }
    }
    console.log("最终结果:",newPortArr)

}
// getMergePort(4,[[4],[2,3,2],[1,2],[5]])
// getMergePort(3,[[2,3,1],[4,3,2],[5]])
// getMergePort(6,[[10],[4,2,1],[9],[3,6,9,2],[6,3,4],[8]])
getMergePort(12)