首页 > 其他分享 >数组去重方法总结

数组去重方法总结

时间:2023-06-01 15:37:19浏览次数:39  
标签:总结 obj1 arr return 数组 res item key 方法

// 基于单key或无key去重,单key一般是对象的id,无key就是元素本身是非对象
export function uniqueArr(arr, key){
    let res;
    if(key){
      res = [...new Map(arr.map(t => [t[key], t])).values()]
    }
    else{
      res = [...new Set(arr)] 
    }
    return res;
}

// 另一种基于单key的去重,基于Set
function uniqueArr(arr, key){
    const res = new Set();
    return arr.filter( item => !res.has(item[key]) && res.add(item[key]) );
}
  
// 非单key,对象进行全键比较,若对象内无特殊类型,且键顺序一致,则可以简单用JSON.stringify来比较
function uniqueArr(arr) {
    const set = new Set();
    return arr.filter((item) => {
      const strItem = JSON.stringify(item);
      if (set.has(strItem)) return false;
      set.add(strItem);
      return true;
    });
}

// 非单key,对象进行全键比较,使用递归进行深比较
function uniqueArr(arr) {
    return arr.filter((item, index) => {
      return index === arr.findIndex(other => deepEqual(item, other));
    })
}

function deepEqual(obj1, obj2) {
    if (obj1 === obj2) return true;
    if (typeof obj1 !== "object" || typeof obj2 !== "object" || obj1 === null || obj2 === null) {
        return false;
    }
    const keys1 = Object.keys(obj1);
    const keys2 = Object.keys(obj2);

    if (keys1.length !== keys2.length) return false;

    for (const key of keys1) {
        if (!keys2.includes(key)) return false;
        if (!deepEqual(obj1[key], obj2[key])) return false;
    }

    return true;
}

标签:总结,obj1,arr,return,数组,res,item,key,方法
From: https://www.cnblogs.com/mengff/p/17449133.html

相关文章

  • Python笔记:正则表达式方法
    正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不......
  • (总结)HTTP常见错误返回代码
    (总结)HTTP常见错误返回代码 Browser, WebServer |作者: 谋万世全局者 http,常见错误,总结,返回代码HTTP返回状态代码当用户试图通过HTTP或FTP协议访问一台运行主机上的内容时,Web服务器返回一个表......
  • 常用的表格检测识别方法——表格结构识别方法 (下)
    常用的表格检测识别方法——表格结构识别方法(下)3.2表格结构识别方法 表格结构识别是表格区域检测之后的任务,其目标是识别出表格的布局结构、层次结构等,将表格视觉信息转换成可重建表格的结构描述信息。这些表格结构描述信息包括:单元格的具体位置、单元格之间的关系、单元格的行......
  • Mysql json数组解析方法
    一、背景在表job_position需要对json数组进行解析,查找json数组对象中的数据 首先想到查找mysql的关于json的函数,这边做个记录。二、解决方案2.1 JSON_EXTRACT(json字段,'$.属性名称')需要了解函数 JSON_EXTRACT(json_doc, path[, path]...)  从json中提取数据,JSON_E......
  • Java小白入门学习方法总结
    系统的整理了我自学Java的学习方法,希望对大家自学Java有帮助~首先,需要一套系统完整的学习教程,这里推荐可以到b站,我看的动力节点老杜的Java基础课,现在更新了最新版Java17的,可直接看最新版,小白无脑入,详细且全面学习地址:https://www.bilibili.com/video/BV1ig4y1c7kPJava小白学习......
  • 高阶函数处理字符串方法
    1、concat()用于将一个或多个字符串拼接成一个新字符串。来看下面的例子:letstringValue="hello";letresult=stringValue.concat("world");//可接收任意多个参数letres=stringValue.concat("world","!!");console.log(result);//"helloworl......
  • SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的
    SaltStack介绍和架构解析简介SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位。SaltStack提供了一个动态基础设施通信总线用于编排,远程执行、配置管理等等。SaltStack项目于2011年启动,年......
  • Java零基础学习方法总结
    系统的整理了我自学Java的学习方法,希望对大家自学Java有帮助~首先,需要一套系统完整的学习教程,这里推荐可以到b站,我看的动力节点老杜的Java基础课,现在更新了最新版Java17的,可直接看最新版,小白无脑入,详细且全面学习地址:https://www.bilibili.com/video/BV1ig4y1c7kPJava小白学习方法......
  • 软件工程个人总结
    这是软件工程的最后一次作业,在此写上我本学期以来的体会和总结。   从二月末至六月初,学习软件工程将近三个月的时间。从一开始的个人项目到后来结对编程再到团队项目,期间经历了太多的困难与挫折,当然也有成功收获。有时会熄灯后继续熬到一两点还在修改程序,当提交成功后心里还......
  • 渐变色Panel构造方法的重写
    #此类用于设置渐变色panelclassMyPanel(wx.Panel):def__init__(self,parent):wx.Panel.__init__(self,parent,wx.ID_ANY)self.SetBackgroundStyle(wx.BG_STYLE_PAINT)self.Bind(wx.EVT_PAINT,self.OnPaint)self.Bind(wx.EVT_SIZ......