判断数组内对象是否有存在的值

需求场景

这是一个新增部门的表单,如果我点击继续添加,就会变成这样:

那么这个表单的背后数据结构是怎样的呢?往下看:

dynamicValidateForm: {
        departmentName: "", // 部门名称名称
        listJob: [
          {
            departmentName: "", //职位
            jobRank: "0", //级别单选
          },
        ],
      },

每次我点击添加职位,就会有新的一个对象被push到listJob这个数组里~

	dynamicValidateForm: {
        departmentName: "", // 部门名称名称
        listJob: [
          {
            departmentName: "", //职位
            jobRank: "0", //级别单选
          },
          {
            departmentName: "", //职位
            jobRank: "0", //级别单选
          },
        ],
      },

现在需求来了,部门下职位不能重复,这就需要我们判断listJob里的每一项departmentName是否有重复的值,下面把代码贴出来:

// 验证数据是否存在
    isRepeat(arr) {
      // 定义一个空对象
      let hash = {};
      // 循环需要查重的数组
      for (let i in arr) {
        console.log(
          "hash[arr[i].departmentName] :>> ",
          hash
        );
        // 判断 hash[arr[i].departmentName] 是否等于true  hash[arr[i].departmentName] 等同于 hash.arr[i].departmentName
        if (hash[arr[i].departmentName]) {
          return true;
        } else {
          // 如果不存在 就进行赋值操作 hash.arr[i].departmentName = true
          // 主要思路就是 对象字段名就是我们要查重的值 值就是ture 以及  undefined
          // 如果 hash 没有对应字段 就会返会 undefined 然后进入else  获得true的值
          // 要是字段名已经进入过一次else 下次还有相同的字段名 就进不了else了 就直接return了
          hash[arr[i].departmentName] = true;
        }
      }
      return false;
    },

很简单的思路,定义一个isRepeat方法,在需要查重的时候调用,然后将数组传递进方法内处理,如果数组存在,则会return true ,之后再根据这个状态处理不同的事件就好!

// 保存按钮点击事件
    submitForm(formName) {
       // 调用验证数据是否存在方法,查询数据
          if (this.isRepeat(dynamicValidateForm.listJob)) {
            // 弹窗提示
            this.$message.error("请检查是否有重复职位!");
            return false;
          }
    }

你以为结束了吗?不,还有呢有的小伙伴会说,我不知要检查一个值是否重复啊,我要检查多个!下面就是检查多个的方法,就是多判断几个字段而已

isRepeat(arr){

var hash = {};

for(var i in arr) {
if(
hash[arr[i].price] &&
hash[arr[i].itemType] &&
hash[arr[i].item_id] &&
hash[arr[i].qty] &&
hash[arr[i].organizationId]
) {
console.log('---', hash[arr[i].price]);
return true;

// hash[arr[i].itemType] = true;
} else {
hash[arr[i].price] = true;
hash[arr[i].itemType] = true;
hash[arr[i].item_id] = true;
hash[arr[i].qty] = true;
hash[arr[i].organizationId] = true;
}
}

return false;

};

如果对你有帮助博主恳请你点个赞再走哦谢谢惠顾~

posted @   捡破烂的小z  阅读(855)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示