数组去重【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.pswp.cn/pingmian/94834.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94834.shtml

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

相关文章

基于单片机设计的智能停车系统_271

文章目录 一、前言 1.1 项目介绍 【1】项目开发背景 【2】设计实现的功能 【3】项目硬件模块组成 【4】设计意义 【5】国内外研究现状 【6】摘要 1.2 设计思路 1.3 系统功能总结 1.4 开发工具的选择 【1】设备端开发 【2】上位机开发 1.5 参考文献 1.6 系统框架图 1.7 系统原理…

for in+逻辑表达式 生成迭代对象,最后转化为列表 ——注意list是生成器转化为列表,但[生成器]得到的就是一个列表,其中包含一个生成器元素

(int(digit) ** 2 for digit in str(n))这个不是 数组(list),而是一个 生成器表达式 (generator expression)。它的作用是:str(n) 把数字 n 转成字符串,例如 n 82 → "82"。for digit in str(n) 遍历字符串中的每个字符 → "…

通信算法之321:verilog中generate if 用法-综合掉无用分支

文章目录 一.示例代码 二.优缺分析 三. generate - case 一.示例代码 提示:参考 // 根据添加/补偿频偏的标志,确定使用的频偏wire signed [WIDTH-1 : 0] freq;generateif(FREQ_FLAG == 1b1) beg

Shell 入门

目录 一、Shell 是什么 二、 .sh 脚本调用 .py 脚本 Python 核心逻辑脚本(data_processor.py) Shell 脚本(pipeline.sh) 三、常见命令 四、.sh脚本 1. 简单例子 2. 进阶例子 3. 猜数字游戏 一、Shell 是什么 Shell 的本…

UNet改进(36):融合FSATFusion的医学图像分割

1. 注意力机制的理论基础 1.1 空间注意力机制 空间注意力机制模拟人类视觉系统,能够关注图像中的显著区域。其核心思想是根据特征图的空间位置生成权重图,突出重要区域并抑制无关信息。常见的实现方式是通过沿通道维度的池化操作获取空间统计信息,然后通过卷积层生成空间注…

docker安装kafka、zookeeper详细步骤

Kafka 简介 Kafka 是一个分布式流处理平台,由 LinkedIn 开发并开源,主要用于高吞吐量的实时数据管道和流处理。 核心特性 高吞吐量:支持每秒百万级消息处理,适合大数据场景。 持久化存储:消息可持久化到磁盘,并支持多副本备份。 分布式架构:支持水平扩展,通过分区(P…

Photoshop - Ps 编辑图像

使用基本图像编辑技术,让图像展现出最好的一面。1.修剪和拉直使用裁剪工具,可以修剪边缘,更改图像的形状和大小,甚至可以对图像进行拉直和弯曲的操作。2.改善亮度和色彩点击菜单栏-编辑-调整-亮度/对比度,调整图像的亮…

SpringBoot 配置文件在运维开发中的应用

在 SpringBoot 项目的运维开发工作里,配置文件相关知识是绕不开的重要内容。它关乎着项目在不同环境下的灵活部署、参数调整,直接影响着应用的稳定性与可维护性。接下来,我们就从临时属性、属性加载优先顺序、配置文件分类这几个维度&#xf…

雷卯国产化之SE3401完全替代AOS的AO3401

上海雷卯PMOS型号SE3401 pin to pin替代AOS型号AO3401,已经有很多客户选用 SE3401替代AO3401,客户可以获得更好的价格和更快的交期。特别是在一些受空间收下限的小电子设备很受青睐。参数对比如下:以下是SE3401(P沟道MOSFET&#…

多语言与零样本语音识别新突破:基于发音特征分类的方法

多语言与零样本语音识别新突破:基于发音特征分类的方法 在语音识别领域,多语言和零样本(zero-shot)语言的识别一直是一个极具挑战性的课题。近期,京都大学的研究团队提出了一种全新的方法,通过引入国际音标(IPA)和发音特征(Articulatory Features)来提升语音识别系统…

1.8 Memory

1.Memory简介 2.Memory中各参数的功能和作用1.Memory简介 1).Memory(内存)模块它是unity中监视内存使用情况的关键工具, 它能帮助我们识别哪些资源在占有大量内存,是否存在内存泄露或垃圾回收频繁等问题2).游戏中如果出现以下问题, 可以重点观察memorya.游戏卡顿, 掉帧- 表现: …

国家统计局数据爬取——机器学习

这个代码是一个用于爬取国家统计局网站数据的Python脚本。下面我将详细解释代码的各个部分及其设计思路。 代码结构概述 import requests # 发送HTTP请求 from bs4 import BeautifulSoup # 解析HTML import pandas as pd # 数据处理和存储 import time # 时间控制 import…

内存管理(智能指针,内存对齐,野指针,悬空指针)

📌 1. 野指针 (Wild Pointer)什么是野指针?野指针指的是未初始化的指针变量。它指向的内存地址是随机的、未知的。产生原因cppint* ptr; // 野指针!未初始化,指向随机地址 *ptr 10; // 危险!可能破坏系统内存char* st…

Spring代理的特点

一.Spring代理的特点1.依赖注入和初始化影响的是原始的对象。2.代理和目标是两个对象,二者成员变量不共用数据。二.测试首先准备以下几个类。Bean1package com.example.springdemo.demos.a13;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.…

嵌入式学习日记(35)TCP并发服务器构建

单循环服务器:服务端同一时刻只能处理一个客户端的任务并发服务器:服务端同一时刻可以处理多个客户端的任务TCP并发服务器构建:TCP: 1. 建立连接,一对一TCP服务端并发模型:1. 多进程进程资源开销大&#x…

【Flask】测试平台开发实战-第二篇

概述:在上一篇我们已经将后端初始化服务后前端的vue框架初始化已经搭建完整,并且可以运行看到界面,服务正常,当然我们看到的前端数据都是mock下的假数据,并不是真实的,这篇我们来开发实现第一个功能&#x…

聊一聊 .NET 的 AssemblyLoadContext 可插拔程序集

一:背景 1. 讲故事 最近在分析一个崩溃dump时,发现祸首和AssemblyLoadContext有关,说实话这东西我也比较陌生,后来查了下大模型,它主要奔着替代 .NetFrameWork 时代的 AppDomain 的,都是用来做晚期加卸载&a…

Java中使用Spring Boot+Ollama实现本地AI的MCP接入

目录结构完善spring bootpom.xml添加依赖application.ymlMCP 工具配置 mcp-servers.json配置类编写API在我的上一篇文章搭建好本地的聊天机器人后,准备接入MCP进一步增强AI的能力,以实现类似手机AI的功能 参考的是第二篇文章链接其内容比较精炼&#x…

C#正则表达式与用法

🌟 C# 常用正则表达式与用法C# 使用正则需要引用命名空间:using System.Text.RegularExpressions; 常用方法:Regex.IsMatch(input, pattern) → 返回 bool,用于验证Regex.Match(input, pattern) → 返回 Match 对象,可…

从0开始学习Java+AI知识点总结-27.web实战(Maven高级)

一、分模块设计与开发:让项目结构更清晰1.1 为什么需要分模块?单模块开发的痛点在小型项目中,单模块(所有代码放在一个工程)或许能满足需求,但项目规模扩大后会出现两大核心问题:维护成本高&…