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

数组去重【JavaScript】

数组去重,并且key和val相同的对象视为相同的,需要去重。

        主函数:

/*** 数组去重* 两个属性相同的对象也认为是相同的* @param {Array} arr* @return {Array} */
function uniqueArray(arr) {const result = []// outer: 标签,标记外层循环outer: for (const element of arr) {for (const res of result) {if (equal(element, res)) {continue outer}}result.push(element)}return result
}

        辅助函数一:isPrimitive判断原始类型

function isPrimitive(val) {return val === null || (typeof val !== "object" && typeof val !== "function")
}

        辅助函数二:equal判断两个值是否相同

function equal(val1, val2) {if (isPrimitive(val1) || isPrimitive(val2)) {return Object.is(val1, val2)}const entries1 = Object.entries(val1)const entries2 = Object.entries(val2)const keys1 = Object.keys(val1)const keys2 = Object.keys(val2)if (entries1.length !== entries2.length) {return false}for (const key1 of keys1) {if (!keys2.includes(key1)) {return false}}// 双向检查才能正确判断// const obj3 = { a: 1, b: 2 }      // const obj4 = { a: 1, b: 2, c: 3 }    for (const key2 of keys2) {if (!keys1.includes(key2)) {return false}}for (const [key, value] of entries1) {if (!equal(value, val2[key])) {return false}}return true
}

        测试案例:

const arr = [{ name: "John", age: 25 },{ name: "Jane", age: 30 },{ name: "John", age: 25 }, // 重复对象[1, 2, 3],[1, 2, 3], // 重复数组"hello","hello",    // 重复字符串{ a: 1, b: undefined },{ a: 1, c: undefined }
]console.log(uniqueArray(arr))//打印
[{ name: 'John', age: 25 },{ name: 'Jane', age: 30 },[ 1, 2, 3 ],'hello',{ a: 1, b: undefined },{ a: 1, c: undefined }
]

http://www.xdnf.cn/news/19259.html

相关文章:

  • 基于 MyBatis-Plus 拦截器实现锁定特殊数据(二)
  • kmp 算法
  • 42-Ansible-Inventory
  • 模式组合应用-组合模式
  • SpringAI应用开发面试剧本与技术知识全解析:RAG、向量数据库、多租户与企业落地场景
  • DbVisualizer:一款功能强大的通用数据库管理开发工具
  • 1.8 Memory
  • Python 入门 Swin Transformer-T:原理、作用与代码实践
  • 05MySQL多表查询全解析
  • 使用axios封装post和get
  • RLPD——利用离线数据实现高效的在线RL:不进行离线RL预训练,直接应用离策略方法SAC,在线学习时对称采样离线数据
  • unity学习——视觉小说开发(二)
  • 【系统分析师】高分论文:论软件的系统测试及应用
  • 宽带有丢包,重传高的情况怎么优化
  • 2025板材十大品牌客观评估报告—客观分析(三方验证权威数据)
  • 【电力电子】MCP602运算放大器测交流电压(120VAC/230VAC),带直流偏置2.5V,比例:133.5:1
  • 【开题答辩全过程】以 “与我同行”中华传统历史数字化平台的设计和分析-------为例,包含答辩的问题和答案
  • 桌面GIS软件设置竖排文字标注
  • PAT 1088 Rational Arithmetic
  • Python文字识别OCR
  • 蓓韵安禧活性叶酸优生优育守护者
  • CSS基础学习第二天
  • 简说DDPM
  • 【系列07】端侧AI:构建与部署高效的本地化AI模型 第6章:知识蒸馏(Knowledge Distillation
  • 监听nacos配置中心数据的变化
  • vector的学习和模拟
  • 桌面GIS软件添加设置牵引文字标注
  • Fortran二维数组去重(unique)算法实战
  • 电子健康记录风险评分与多基因风险评分的互补性与跨系统推广性研究
  • 福彩双色球第2025100期篮球号码分析