• 20240529每日前端--------vue数组对象包含数组,判断子数组是否有重复对象


    数组格式如下:

    "industrySceneList": [
        {
            "mainIndustry": 1,
            "mainIndustryName": "林草",
            "sceneList": [
                {
                    "subIndustry": 1,
                    "subIndustryName": "森林防火"
                }
            ]
        },
        {
            "mainIndustry": 2,
            "mainIndustryName": "国土",
            "sceneList": [
                {
                    "subIndustry": 141,
                    "subIndustryName": "其它-1"
                },
                {
                    "subIndustry": 11,
                    "subIndustryName": "耕地保护"
                },
                {
                    "subIndustry": 12,
                    "subIndustryName": "矿山保护"
                }
            ]
        },
        {
            "mainIndustry": 12,
            "mainIndustryName": "其它-2",
            "sceneList": [
                {
                    "subIndustry": 71,
                    "subIndustryName": "其它-3"
                }
            ]
        }
    ],
    

    第一种办法:通过map计数来判定:

    onSubIndustryChange(industrySceneList) {
      let validIndust = true;
      let subIndustry = "";
      // 创建一个Map来存储subIndustry及其出现次数
      const subIndustryCounts = new Map();
    
      // 遍历industrySceneList
      industrySceneList.forEach(industryScene => {
        // 遍历当前场景列表中的sceneList
        industryScene.sceneList.forEach(scene => {
          // 获取当前subIndustryName的计数,如果不存在则默认为0
          const count = subIndustryCounts.get(scene.subIndustryName) || 0;
          // 将计数加1
          subIndustryCounts.set(scene.subIndustryName, count + 1);
        });
      });
    
      // 筛选出计数大于1的subIndustry,即重复的subIndustry
      const duplicates = Array.from(subIndustryCounts)
          .filter(([subIndustry, count]) => count > 1)
          .map(([subIndustry, _]) => subIndustry);
    
      //数组转String用逗号拼接
      subIndustry = duplicates.join(',');
      if (duplicates.length > 0) {
        validIndust = false;
        this.$message({
          message: '当前存在' +subIndustry+'重复,请检查后重试',
          type: 'error'
        });
      }
      return validIndust;
    },
    

    第二种办法:通过ES6 set数据类型

    hasDuplicateIds(value) {
      console.log(value);
      let dupValid = true;
      const nonMinusOneItems = this.industryScenario.filter(item => item.mainIndustry == value);
      const uniqueNonMinusOneIds = new Set(nonMinusOneItems.map(item => item.mainIndustry));
    
      if(nonMinusOneItems.length !== uniqueNonMinusOneIds.size){
        this.$message({
          message: '行业不能重复',
          type: 'error'
        });
        dupValid = false;
      }
      return dupValid;
    },
    

    ---------- 兄弟们更喜欢哪一种呢~

  • 相关阅读:
    启山智软/多商户商城源码优势
    软通动力:电子签是HR数字化的重要抓手
    力扣刷题记录141.1-----34. 在排序数组中查找元素的第一个和最后一个位置
    【第五部分 | JS WebAPI】4:八千字详解 “事件·高级篇”
    程序员必须了解的 10个免费 Devops 工具
    JavaScript-DOM编程
    【JS】前端面试常见手写题总结
    【学生网页设计作品 】关于HTML公益主题网页设计——公益电信诈骗10页
    计算机网络
    Doris1.1.1多种异构数据源数据导入方案
  • 原文地址:https://blog.csdn.net/weixin_42678822/article/details/139305360