0

0

js集合set去重方法_js集合set去重技巧详解

冰火之心

冰火之心

发布时间:2025-06-29 20:25:01

|

829人浏览过

|

来源于php中文网

原创

javascript中利用set集合去重简洁高效,通过new set(arr)创建唯一值集合再转回数组即可。但set无法去除nan重复值,也无法识别相同对象字面量;对于此类情况需使用filter和indexof或第三方库如lodash处理;此外set可用于其他数据结构的间接去重,例如将链表转为数组再使用set,最后转回原始结构;对于按对象属性去重的复杂场景,可使用map结合filter方法实现,根据指定属性过滤重复项。

js集合set去重方法_js集合set去重技巧详解

JavaScript中,利用Set集合进行去重是一种非常简洁高效的方式。它能快速移除数组中的重复元素,让你的代码更清晰易读。

js集合set去重方法_js集合set去重技巧详解

解决方案:

js集合set去重方法_js集合set去重技巧详解

Set对象天生具备去重的特性。你可以将数组转换为Set,然后再将Set转换回数组,这样就得到了去重后的结果。

js集合set去重方法_js集合set去重技巧详解
function uniqueArray(arr) {
  return [...new Set(arr)];
}

// 示例
const myArray = [1, 2, 2, 3, 4, 4, 5];
const uniqueArrayResult = uniqueArray(myArray);
console.log(uniqueArrayResult); // 输出: [1, 2, 3, 4, 5]

这段代码的核心在于new Set(arr),它会创建一个包含arr中所有唯一值的Set对象。然后,使用扩展运算符...将Set对象转换回数组。

Set去重相比传统循环判断的方式,代码量更少,可读性更强,性能也通常更好,尤其是在处理大型数组时。

Set集合去重有哪些局限性?

虽然Set去重很方便,但它并非万能。例如,Set认为NaNNaN是不同的,因此无法去除数组中多个NaN值。此外,Set无法区分对象,即使两个对象字面量看起来完全相同,Set也会认为它们是不同的。

万知
万知

万知: 你的个人AI工作站

下载
const arrWithNaN = [1, NaN, NaN, 2];
const uniqueArrWithNaN = [...new Set(arrWithNaN)];
console.log(uniqueArrWithNaN); // 输出: [1, NaN, NaN, 2]

const arrWithObjects = [{a: 1}, {a: 1}];
const uniqueArrWithObjects = [...new Set(arrWithObjects)];
console.log(uniqueArrWithObjects); // 输出: [{a: 1}, {a: 1}]

对于包含NaN或对象的数组,可能需要使用其他去重方法,例如使用filterindexOf,或者使用第三方库如Lodash。

除了数组,Set还能用于其他数据结构的去重吗?

Set主要用于数组去重,但它也可以间接用于其他数据结构的去重。例如,你可以先将链表或树转换为数组,然后使用Set去重,最后再将结果转换回原始数据结构。这种方法的效率取决于数据结构转换为数组的效率。

// 假设你有一个链表 toArray() 方法将其转换为数组
// 示例:
// class LinkedList {
//   constructor() {
//     this.head = null;
//   }
//   toArray() {
//     let arr = [];
//     let current = this.head;
//     while(current) {
//       arr.push(current.data);
//       current = current.next;
//     }
//     return arr;
//   }
// }

// const linkedList = new LinkedList();
// // ... 向链表添加数据 ...

// const arrayFromLinkedList = linkedList.toArray();
// const uniqueArrayFromLinkedList = [...new Set(arrayFromLinkedList)];

// // 然后你可以将 uniqueArrayFromLinkedList 转换回链表

这种方法需要根据具体的数据结构进行调整,确保转换过程不会丢失关键信息。

如何处理更复杂的去重场景,例如根据对象的某个属性去重?

当需要根据对象的某个属性进行去重时,Set本身无法直接实现。你需要使用其他方法,例如使用Map或者reduce方法。

function uniqueArrayByProperty(arr, property) {
  const map = new Map();
  return arr.filter((item) => {
    if (!map.has(item[property])) {
      map.set(item[property], true);
      return true;
    }
    return false;
  });
}

// 示例
const myArray = [{id: 1, name: 'A'}, {id: 2, name: 'B'}, {id: 1, name: 'C'}];
const uniqueArrayById = uniqueArrayByProperty(myArray, 'id');
console.log(uniqueArrayById); // 输出: [{id: 1, name: 'A'}, {id: 2, name: 'B'}]

这段代码使用Map来存储已经出现过的属性值,然后使用filter方法过滤掉重复的对象。这种方法可以灵活地根据不同的属性进行去重。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1502

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

232

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

87

2025.10.17

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

539

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

21

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

28

2026.01.06

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

9

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

前端开发(基础+实战项目合集)
前端开发(基础+实战项目合集)

共60课时 | 3.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号