js之零碎工具(四)

一、数组的去重

简单类型的去重
let arr = [1, 2, 2, 3, 4, 4, 5];
let uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // 输出:[1, 2, 3, 4, 5]

在这个例子中,我们首先创建了一个新的 Set 对象,并将数组 arr 作为参数传递给 Set 的构造函数。这会创建一个新的 Set 对象,其中包含 arr 中的所有唯一值。然后,我们使用扩展运算符 … 将 Set 对象转换回数组。
(ps: 如果你的数组中包含对象,那么这种方法可能无法正确地去重,因为 Set 使用的是严格相等性检查 (===),所以 {} 和 {} 是不相等的。在这种情况下,你可能需要使用其他方法来去重。)

数组中包含对象的去重

如果数组中包含的对象,属性的顺序不同,但是属性值一样,我们仍然认为它们是相同的,那么我们可以先对对象的属性进行排序,然后再进行去重。

let arr = [
  { id: 1, name: 'Tom' },
  { name: 'Jerry', id: 2 },
  { id: 1, name: 'Tom' },
  { id: 3, name: 'Spike' },
  { name: 'Jerry', id: 2 }
];

let uniqueArr = Array.from(
  new Set(
    arr.map(item => {
      return JSON.stringify(
        Object.keys(item)
          .sort()
          .reduce((result, key) => {
            result[key] = item[key];
            return result;
          }, {})
      );
    })
  )
).map(item => JSON.parse(item));

console.log('uniqueArr', uniqueArr);

在这里插入图片描述

在这个例子中,我们首先使用 Array.prototype.map 对数组中的每个对象进行处理。对于每个对象,我们先获取它的所有属性名,然后对属性名进行排序,然后使用 Array.prototype.reduce 创建一个新的对象,这个新的对象的属性是按照排序后的顺序添加的。然后我们将这个新的对象转换为字符串。

然后,我们使用 Set 来去重。最后,我们再次使用 Array.prototype.map 和 JSON.parse 将字符串转换回对象。
可以优化作为一个函数抛出

export function getUniqueObjArr(arr: any[]) {
  let uniqueArr = Array.from(
    new Set(
      arr.map((item: any) => {
        return JSON.stringify(
          Object.keys(item)
            .sort()
            .reduce((result: any, key) => {
              result[key] = item[key]
              return result
            }, {}),
        )
      }),
    ),
  ).map(item => JSON.parse(item))

  console.log('uniqueArr==', uniqueArr)
  return uniqueArr
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/259111.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习中的张量维度

1 深度学习中的张量 在深度学习框架中,Tensor(张量)是一种数据结构,用于存储和操作多维数组。张量可以被视为一种扩展的矩阵,它可以具有任意数量的维度。 在深度学习中,张量通常被用来表示神经网络的输入…

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜——按题号

上来先找C:一个等号一个不等号型,一个定量一个定性型,取值范围有交集型,最后找选项需要联立型(因为是否需要联立,不要判断,一般如十字交叉)。一般也就3-4个C。详见这里 找完C后找AB&…

Java开发框架和中间件面试题(1)

1.什么是Spring框架? Spring是一种轻量级框架,旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说的Spring框架就是Spring Framework,它是很多模块的集合,使用这些模块可以很方便的协助我们进行开发。这些模块是核心容器、数据访…

制造行业定制软件解决方案——工业信息采集平台

摘要:针对目前企业在线检测数据信号种类繁多,缺乏统一监控人员和及时处置措施等问题。蓝鹏测控开发针对企业工业生产的在线数据的集中采集分析平台,通过该工业信息采集平台可将企业日常各种仪表设备能够得到数据进行集中分析处理存储&#xf…

vmware离线安装docker-compose

vmware离线安装docker-compose 最近安装docker-compose,发现git取拉取,不是拒绝连接就是报443错误,或者其他错误 最后发现用包直接传上去好用,不用git拉取了 离线安装docker-compose 本文章给的docker-compose离线包,…

【超详细】基于单片机控制的十字道路口交通灯控制

目录 最终效果 一、设计任务 二、设计报告 1 设计说明 1.1功能分析 1.1.1整体系统功能分析 1.1.2显示状态功能分析 1.1.3设置状态功能分析 1.1.4紧急状态功能分析 1.2方案比选 1.2.1车辆LED数码管倒计时显示板块 1.2.2车辆信号灯显示板块 1.2.3行人信号灯显示板块 …

Web请求与响应

目录 Postman Postman简介 Postman的使用 请求 简单参数 实体参数 数组参数 集合参数 日期参数 Json参数 路径参数 响应 ResponseBody 统一响应结果 Postman Postman简介 postman是一款功能强大的网页调试与发送网页http请求的Chrome插件,常用于进行…

Zoho Mail:1600万企业用户的信赖之选

Zoho Mail和Workplace在线办公套件一起,已经成长为一个集邮箱、即时通讯、生产力工具于一身的非常全面的强大平台。经过数十年持续深入的研发投入,我们的产品可以很好地服务大型企业。 这是Zoho创始人斯瑞达•温布在Zoho Mail15周年之际发布的感想。 过去…

MSVC编译 openssl windows 库

开发需要在windows下集成 openssl 库,参考官方指导完成了编译:openssl/NOTES-WINDOWS.md at master openssl/openssl 不过,最后还是走了直接下载的捷径。 1. 安装 ActivePerl 需要在 ActiveState 注册账户,之后彼会提供具体的…

跨境卖家必看!TikTok带货经验分享,TikTok直播带货怎么做?

如今直播带货正发展得如火如荼,不少跨境人也纷纷做起了带货,其中TikTok带货的力量不容小觑,也已经成为了跨境电商运营非常火爆的营销方式,有很多朋友问龙哥TikTok带货怎么做,其实以龙哥这么多年的经验来看,…

VMware vSphere 虚拟机迁移按钮灰色解决方案

现象:在 vCenter Server 中右键单击虚拟机,然后单击迁移时,迁移选项将灰显。 原因:在虚拟机备份完成后,没有移除 vCenter Server 数据库 vpx_disabled_methods 表中的条目时,可能会出现此问题。 解决方案&a…

保姆月嫂企业网站建设的效果如何

保姆月嫂月子中心成为很多家庭的选择,随着人们生活质量提升及消费升级,围绕母婴行业、居家场景的服务需求度越来越多,而市场同行竞争压力下,也促使着各家保姆月嫂品牌需要通过多种方式增长破圈。 虽然保姆月嫂的市场需求度较高&am…

【Python炫酷系列】祝考研的友友们金榜题名吖(完整代码)

文章目录 环境需求完整代码详细分析系列文章环境需求 python3.11.4及以上版本PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.…

谷达冠楠科技:现在开抖音小店怎么样前景好不好

随着互联网的发展,电商平台已经成为了人们生活中不可或缺的一部分。而近年来,抖音作为短视频平台的领军者,也推出了自己的电商功能——抖音小店。那么,现在开抖音小店的前景如何呢? 首先,我们需要了解抖音的用户基数。…

CountDownLatch和Semaphore的区别?

CountDownLatch和Semaphore都是在Java中用于多线程协同的工具,但它们有一些重要的区别。 CountDownLatch: 用途: 主要用于等待一个或多个线程完成操作,它的计数器只能被减少,不能被增加。计数: 初始化时需…

致深空中最遥远的你

"旅行者1号" 的在11月14日飞行数据系统陷入了自动重复的状态,飞行数据系统的电信单元开始重复发回1和0模式就像陷入循环一样,旅行者1号目前离地球约240亿公里发回的消息需要大约22.5小时的传播时间。NASA分析故障来官探测器上的两台计算机&…

攻防世界-web-ics07

1. 题目描述 工控云管理系统项目管理页面解析漏洞 打开链接,是这样的一个界面 我们点击项目管理 可以看到,这里有一个查询界面,还有个view-source的链接,我们点击下view-source,可以看到这里面共有三段php代码 第一段…

Redis是单线程还是多线程,为什么快?

1.Redis是单线程模型还是多线程模型? 在redis6.X版本之前,属于彻彻底底的单线程模型,redis在解析客户端命令和读写数据的操作都是由一个单线程来解决的。 而redis6.X版本后,引入了多线程,但是只作用于解析客户端的命令…

【踩坑】参考官方文档 蜂鸟E203从运行自测样例到运行HelloWorld路上的坑

【踩坑】参考官方文档 蜂鸟E203从运行自测样例到运行HelloWorld路上的坑 1. riscv-nuclei-elf-gcc: Command not found2. "monitor" command not supported by this target.3. Error finishing flash operation运行成功 首先这里放出蜂鸟E203快速上手文档的链接&…

图像分类(手把手教你搭建分类模型)

图像分类是计算机视觉领域中的一项重要任务,它的目标是将输入的图像分为不同的类别。图像分类在许多应用中都起到关键作用,如人脸识别、物体识别、自动驾驶等。本文将从以下几个方面来阐述图像分类的相关内容。 一、图像分类的基本原理 图像分类的基本原…