当前位置: 首页 > news >正文

判断数组对象中是否某个字段的值有重复

场景:常在前端添加多行或修改某行数据时。对整个数组对象中用于判断某个字段,标题或者编码等字段是否重复,如下图简单示意:
在这里插入图片描述

要判断一个数组中对象的某个字段是否有重复值,可以使用类似的方法,但需要调整逻辑以检查对象中特定字段的值。以下是一些常用的方法:
方法 1:使用 Set

function hasDuplicateField(array, field) {const uniqueValues = new Set();for (const obj of array) {if (uniqueValues.has(obj[field])) {return true;}uniqueValues.add(obj[field]);}return false;
}const array = [{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' },{ id: 3, name: 'Alice' }
];console.log(hasDuplicateField(array, 'name')); // 输出: true
console.log(hasDuplicateField(array, 'id'));   // 输出: false

方法 2:使用 some 方法

function hasDuplicateField(array, field) {return array.some((obj, index) => {const value = obj[field];return array.some((innerObj, innerIndex) => innerIndex !== index && innerObj[field] === value);});
}const array = [{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' },{ id: 3, name: 'Alice' }
];console.log(hasDuplicateField(array, 'name')); // 输出: true
console.log(hasDuplicateField(array, 'id'));   // 输出: false```方法 3:使用对象或 Map```cpp
function hasDuplicateField(array, field) {const seen = {};for (const obj of array) {const value = obj[field];if (seen[value]) {return true;}seen[value] = true;}return false;
}const array = [{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' },{ id: 3, name: 'Alice' }
];console.log(hasDuplicateField(array, 'name')); // 输出: true
console.log(hasDuplicateField(array, 'id'));   // 输出: false

方法 4:使用 filter 方法`在这里插入代码片

function hasDuplicateField(array, field) {const uniqueValues = array.map(obj => obj[field]);const uniqueArray = uniqueValues.filter((value, index) => uniqueValues.indexOf(value) === index);return uniqueArray.length !== uniqueValues.length;
}const array = [{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' },{ id: 3, name: 'Alice' }
];console.log(hasDuplicateField(array, 'name')); // 输出: true
console.log(hasDuplicateField(array, 'id'));   // 输出: false

总结
Set 方法:通常性能最佳,适合大多数情况。
some 方法:代码简洁,但性能不如 Set 方法。
对象或 Map 方法:适合需要额外记录或处理重复元素的场景。
filter 方法:代码可读性高,但性能较差,适合小规模数据。
选择方法时,可以根据数据的规模和性能要求来决定。对于大型数组,使用 Set 通常是最佳选择。

相关文章:

  • 生产环境怎么移除console
  • 数字IC后端培训教程之数字后端项目典型案例分析
  • js 字符串中的特殊字符全部替换成定义对象里面key对应的value值(进阶篇)
  • Python | 赤道频散关系图
  • 【Redis】SDS结构
  • 图形化编程平台的破局之道:从工具同质化到生态差异化
  • 从MCU到SoC的开发思维转变
  • 2024年北理工Python123第六章测验题整理
  • React 播客专栏 Vol.9|React + TypeScript 项目该怎么起步?从 CRA 到配置全流程
  • 2025年Energy SCI1区TOP,改进雪消融优化算法ISAO+电池健康状态估计,深度解析+性能实测
  • UE RPG游戏开发练手 第二十一课 使用C++代码实现装备武器
  • C/C++ 内存管理深度解析:从内存分布到实践应用(malloc和new,free和delete的对比与使用,定位 new )
  • 如何使用 WebBrowserPassView 查看所有浏览器密码?
  • 用户态到内核态:Linux信号传递的九重门(二)
  • 动手学深度学习12.4.硬件-笔记练习(PyTorch)
  • 应急响应靶机——WhereIS?
  • C# 中 static的使用
  • Mysql的索引,慢查询和数据库表的设计以及乐观锁和悲观锁
  • DeepSeek | AI需求分析
  • 从零开始的python学习(七)P89+P90+P91+P92+P93+P94
  • 韩国总统选战打响:7人角逐李在明领跑,执政党临阵换将陷入分裂
  • 哈佛新论文揭示 Transformer 模型与人脑“同步纠结”全过程!AI也会犹豫、反悔?
  • 佩斯科夫:俄会考虑30天停火提议,但试图对俄施压无用
  • 视频丨习近平同普京会谈:共同弘扬正确二战史观,维护联合国权威和地位
  • 加力、攻坚、借力、问效,上海为优化营商环境推出增量举措
  • 马上评|持续对标国际一流,才有22项“全球最优”