从多个角度详解 map 去重

一、背景介绍

在前端开发中,经常需要处理一些数据,而对于数据的去重操作,是一件非常常见的任务。map 是一种十分常用的数据结构,也是一种进行去重操作的好帮手。

二、方法介绍

下面我们就从几个角度来详解如何运用 map 实现一些高效的去重操作。

三、基础去重

map 最基本的用途就是进行去重,我们可以简单的将需要去重的数据作为 map 的键,这样就可以通过 map 的键的唯一性来实现去重。下面是一段实现基础去重的代码。

const arr = [1, 2, 3, 3, 4, 5, 5];
const map = new Map();
arr.forEach(item => {
    map.set(item, true);
});
console.log([...map.keys()]); // [1,2,3,4,5]

上面的代码中,通过遍历数组,将每个元素作为键来存储在 map 中,由于 map 的键的唯一性,存储相同的元素时,后一次存储会覆盖前一次存储,最终只保留了一个副本。

四、对象数组去重

在前端开发中,经常会遇到需要对一个包含多个对象的数组进行去重的情况,这时我们可以使用 JSON.stringify 的方式将对象序列化成字符串再存储到 map 中。下面是一段对象数组去重的代码。

const arr = [
    {name: 'apple', price: 2},
    {name: 'banana', price: 3},
    {name: 'apple', price: 2},
    {name: 'orange', price: 4}
];
const map = new Map();
arr.forEach(item => {
    map.set(JSON.stringify(item), item);
});
console.log([...map.values()]); // [{name: 'apple', price: 2}, {name: 'banana', price: 3}, {name: 'orange', price: 4}]

上述代码中,遍历对象数组,将每个对象序列化成字符串,然后使用序列化后的字符串作为键,原始对象作为值进行存储。由于对象的属性值顺序不同会导致序列化后的字符串不同,从而起到了去重的作用。

五、多字段去重

有时候我们需要按照多个字段进行去重,这时我们可以将这些字段拼接起来作为键存储在 map 中。下面是一段实现多字段去重的代码。

const arr = [
    {name: 'apple', price: 2, color: 'red'},
    {name: 'banana', price: 3, color: 'yellow'},
    {name: 'apple', price: 2, color: 'green'},
    {name: 'orange', price: 4, color: 'orange'}
];
const map = new Map();
arr.forEach(item => {
    const key = item.name + '-' + item.price + '-' + item.color;
    map.set(key, item);
});
console.log([...map.values()]); // [{name: 'apple', price: 2, color: 'red'}, {name: 'banana', price: 3, color: 'yellow'}, {name: 'orange', price: 4, color: 'orange'}]

上述代码中,按照每个对象的 name、price、color 这三个属性拼接成一个字符串作为键进行存储,这样就可以实现按照多个字段进行去重。

六、Set 对象去重

除了使用 map 进行去重之外,我们还可以使用 JavaScript 的原生对象 Set 来对数据进行去重。Set 对象是一种无序且不重复的数据集合,可以用来快速判断一个元素是否出现在集合中。下面是一段使用 Set 对象实现去重的代码。

const arr = [1, 2, 3, 3, 4, 5, 5];
const set = new Set(arr);
console.log([...set]); // [1,2,3,4,5]

上述代码中,通过向 Set 对象中传递数组来创建一个集合对象,在构建时,Set 对象会自动进行去重操作。最终可以通过将 Set 对象转换成数组来输出结果。

七、小结

本文从多个角度阐述了如何使用 map 构建去重逻辑,包括基础去重、对象数组去重、多字段去重以及使用 Set 对象进行去重。深入理解这些去重操作对于优化前端开发效率及性能都有很大的帮助。

原创文章,作者:TYNP,如若转载,请注明出处:https://www.506064.com/n/145276.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
TYNPTYNP
上一篇 2024-10-27 23:47
下一篇 2024-10-27 23:47

相关推荐

  • 为什么Python不能编译?——从多个方面浅析原因和解决方法

    Python作为很多开发人员、数据科学家和计算机学习者的首选编程语言之一,受到了广泛关注和应用。但与之伴随的问题之一是Python不能编译,这给基于编译的开发和部署方式带来不少麻烦…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • Python合并多个相同表头文件

    对于需要合并多个相同表头文件的情况,我们可以使用Python来实现快速的合并。 一、读取CSV文件 使用Python中的csv库读取CSV文件。 import csv with o…

    编程 2025-04-29
  • 从ga角度解读springboot

    springboot作为目前广受欢迎的Java开发框架,其中的ga机制在整个开发过程中起着至关重要的作用。 一、ga是什么 ga即Group Artifacts的缩写,它是Mave…

    编程 2025-04-29
  • 从多个方面用法介绍yes,but let me review and configure level of access

    yes,but let me review and configure level of access是指在授权过程中,需要进行确认和配置级别控制的全能编程开发工程师。 一、授权确…

    编程 2025-04-29
  • 从多个方面zmjui

    zmjui是一个轻量级的前端UI框架,它实现了丰富的UI组件和实用的JS插件,让前端开发更加快速和高效。本文将从多个方面对zmjui做详细阐述,帮助读者深入了解zmjui,以便更好…

    编程 2025-04-28
  • 学Python用什么编辑器?——从多个方面评估各种Python编辑器

    选择一个适合自己的 Python 编辑器并不容易。除了我们开发的应用程序类型、我们面临的软件架构以及我们的编码技能之外,选择编辑器可能也是我们编写代码时最重要的决定之一。随着许多不…

    编程 2025-04-28
  • 使用easypoi创建多个动态表头

    本文将详细介绍如何使用easypoi创建多个动态表头,让表格更加灵活和具有可读性。 一、创建单个动态表头 easypoi是一个基于POI操作Excel的Java框架,支持通过注解的…

    编程 2025-04-28
  • Python中角度变弧度

    本文将从以下几个方面详细阐述Python中角度变弧度的实现方法和应用场景。 一、角度和弧度的概念 在Python中,角度和弧度这两个概念是经常用到的。角度是指单位圆上的作用角度,其…

    编程 2025-04-28
  • 创建列表的多个方面

    本文将从多个方面对创建列表进行详细阐述。 一、列表基本概念 列表是一种数据结构,其中元素以线性方式组织,并且具有特殊的序列位置。该位置可以通过索引或一些其他方式进行访问。在编程中,…

    编程 2025-04-28

发表回复

登录后才能评论