js之零碎工具(四)

news2024/9/24 13:24:06

一、数组的去重

简单类型的去重
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
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

令人惊叹的代码技巧

在编程世界中,有一些令人惊叹的代码技巧和巧妙的实现方式。以下是一些我见过的令人印象深刻的代码技巧: 函数式编程魔法: 使用函数式编程的一些特性,比如高阶函数、匿名函数和Lambda表达式,可以使代码更为简洁、易读。…

C# 使用NUnit进行单元测试

写在前面 NUnit是一个开源的.Net单元测试框架,经常被用来在.Net体系下做白盒测试。 NUnit.org GitHub 本文记录一个简单的使用NUnit进行单元测试的完整流程。 代码实现 新建一个目标类库NUnitTester,添加待测试的类文件,内容如下&#…

hyper-v ubuntu2204指定静态ip地址

虚拟机静态IP设置 虚拟机每次重新启动,都会动态分配IP,这导致我们无法使用一个固定的ip连接到虚拟机内部。解决该问题的最直接有效的办法就是给虚拟机绑定2张网卡,一张用于连接外网、一张用于连接内网。 init 0 关机,也可以从管…

Python正则表达式与replace函数,空格问题轻松搞定!

更多资料获取 📚 个人网站:ipengtao.com 在数据处理中,清理文本数据是一个常见而关键的任务。空格是文本中常见的干扰项之一,可能存在于字符串的开头、结尾或中间。Python提供了正则表达式和replace函数两种强大的工具&#xff0…

Unity中Shader平移变换

文章目录 前言方式一:对顶点本地空间下的坐标进行相加平移1、在属性面板定义一个四维变量记录在 xyz 上平移多少。2、在常量缓冲区进行申明3、在顶点着色器中,在进行其他坐标转化之前,对模型顶点本地空间下的坐标进行转化4、我们来看看效果 方…

Pixel Nerf代码阅读

Input: 图像的 分辨率是 300*400; 每个场景里面有 49张 Training 的图像。 SB: scene batch 场景的个数; 4 NV: number input ,每个场景的视角,也就是图像的数量; 49 每条光线首先…

被我们忽略的HttpSession线程安全问题

1. 背景 最近在读《Java concurrency in practice》(Java并发实战),其中1.4节提到了Java web的线程安全问题时有如下一段话: Servlets and JPSs, as well as servlet filters and objects stored in scoped containers like ServletContext and HttpSe…

牛客BC115 超级圣诞树

万众瞩目 在上一篇我们介绍了一个圣诞树的打印,而这道题与上次不同的是他的基本单位是一直在变的 我建议先把上一个搞懂在写这道题这个。 牛客网BC114 圣诞树-CSDN博客 ok那么正文开始 题目如下 今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中…

Flink Table API 与 SQL 编程整理

Flink API总共分为4层这里主要整理Table API的使用 Table API是流处理和批处理通用的关系型API,Table API可以基于流输入或者批输入来运行而不需要进行任何修改。Table API是SQL语言的超集并专门为Apache Flink设计的,Table API是Scala和Java语言集成式…

【数据结构】并查集的简单实现,合并,查找(C++)

文章目录 前言举例: 一、1.构造函数2.查找元素属于哪个集合FindRoot3.将两个集合归并成一个集合Union4.查找集合数量SetCount 二、源码 前言 需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规…

Unity的UI界面——Text/Image

编辑UI界面时,要先切换到2d界面 (3d项目的话) 1.Text控件 Text控件的相关属性: Character:(字符) Font:字体 Font Style:字体样式 Font Size:字体大小 Line Spac…

c语言力扣题目:消失的数字(有关时间复杂度O(N²)O(N))以及对异或操作符的更深入的理解(如何用人脑的十进制去考量二进制)

目录 Way One :暴力求解,时间复杂度为 O(N) 代码1 Way Two : 时间复杂度限制到 O(N) 代码及其详解 如题 Way One :暴力求解,时间复杂度为 O(N) 大体思路:比如这里我们需要处理的整型数组是"3,0,1",我们可以用冒泡排序或者 qsort函数将他从大到小进行排序成"…

【SQL】根据年份,查询每个月的数据量

根据年份,查询每个月的数据量 一种 WITH Months AS (SELECT 1 AS Month UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION…

惯性导航基础知识学习----02惯性器件的误差和标定(下)

🌈武汉大学惯性导航课程合集是入门惯导的精品课程~ 作为导航路上的鼠鼠我,要开始学习惯性导航了~ 需要达到的要求是大致了解惯导的原理等~ 后期会陆续更新惯导相关的知识和笔记等~ 🐬 本blog为 武汉大学惯性导航课程 的记录~ 感谢团队提供的开…

Java中四种引用类型(强、软、弱、虚)

目录 引言 强引用(Strong References) 软引用(Soft References) 弱引用(Weak References) 虚引用(Phantom References) 引用类型的应用场景 总结 引言 Java中的引用类型是管理…

智能优化算法应用:基于梯度算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于梯度算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于梯度算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.梯度算法4.实验参数设定5.算法结果6.参考文献7.MA…

[Angular] 笔记 3:ngIf

ngIf 是 Angular 的行为指令。 基本写法&#xff1a;<div *ngIf"hero" class"name">{{ hero.name }} </div> 当 ngIf 表达式求值为 truthy 时&#xff0c;Angular会渲染在then子句中提供的模板&#xff1b;当为falsy 时&#xff0c;Angular会…

数显温度表 DHC15W AC110~240V 温度范围 -9+99度 导轨安装

一、概述 ​DHC15W数显温度表是一种高精度的温度测量仪器&#xff0c;采用数字显示技术&#xff0c;具有测量准确、稳定性高、操作简单、方便实用等优点。广泛应用于电子、冶金、化工、医药、食品等行业&#xff0c;适用于各种温度测量和监控场景。 二、产品特点 高精度测量&…

金蝶 Apusic 应用服务器任意文件上传漏洞

漏洞简介 金蝶 Apusic 应用服务器存在一个任意文件上传漏洞&#xff0c;攻击者可以通过构造恶意请求上传恶意文件到服务器&#xff0c;导致服务器失陷。 指纹识别 app“Apusic应用服务器” 漏洞复现 1.通过脚本构造应用zip压缩包&#xff1a; import zipfiletry:zipFile …

mysql创建用户和赋权

1.创建用户 CREATE USER new_userlocalhost IDENTIFIED BY user_password; “localhost"只允许本地连接&#xff0c;而”%"允许所有IP地址都可以连接到服务器。 2.赋权 GRANT ALL PRIVILEGES ON database_name.* TO new_userlocalhost; FLUSH PRIVILEGES; 3.给…