首页 > 其他分享 >前端开发数组去重方法

前端开发数组去重方法

时间:2024-07-18 15:08:38浏览次数:12  
标签:Set const undefined true NaN item 数组 方法 前端开发

使用原生 JavaScript 方法

1. filter() 方法配合 indexOf()

const uniqueArray = array.filter((item, index, self) => {
  return self.indexOf(item) === index;
});

该方法利用 filter() 遍历数组,对于每个元素,通过 indexOf() 查找其在原数组中的第一个索引。如果当前元素的索引与正在遍历的索引相同,说明这是该元素在数组中的首次出现,保留该元素;否则,忽略该元素。

2. reduce() 方法

const uniqueArray = array.reduce((acc, current) => {
  return acc.includes(current) ? acc : [...acc, current];
}, []);

这里使用 reduce() 函数将数组累积到一个新的数组(acc)中。在每次迭代中,检查当前元素是否已存在于累积数组中。若不存在,则将其添加至累积数组;否则,跳过该元素。

3. 利用对象存储的方法


const arr = [9, 2, 9, '123', '123', true, NaN, true, false, false, undefined, undefined, NaN, {}, {}]
function removeDuplicate(arr) {
    const newArr = []
    const obj = {}
 
    arr.forEach(item => {
        if (!obj[item]) {
            newArr.push(item)
            obj[item] = true
        }
    })
 
    return newArr
}
 
const result = removeDuplicate(arr)
console.log(result) //  [9, 2, '123', true, NaN, false, undefined]

注意:可以对 NaN 和 {} 去重

利用 ES6 新特性

1. new Set() + Array.from

const arr = [9, 2, 9, '123', '123', true, NaN, true, false, false, undefined, undefined, NaN, {}, {}]
const newArr = Array.from(new Set(arr))
console.log(newArr)   //  [9, 2, '123', true, NaN, false, undefined, {…}, {…}]

Set对象:是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即Set中的元素是唯一的。Set本身是一个构造函数,用来生成 Set 数据结构。类似于数组,不是真正的数组,不能使用 length 方法
Array.from() 方法:对一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。
注意:以上去方式对NaN和undefined类型去重也是有效的,是因为NaN和undefined都可以被存储在Set中, NaN之间被视为相同的值(尽管在js中:NaN !== NaN)
对 {} 无效

2. 扩展运算符

const uniqueArray = [...new Set(array)];

这种方法简洁高效,利用 ES6 的 Set 数据结构自动去除重复元素的特性,再通过扩展运算符将 Set 转换回数组。Set 是一种特殊的集合,不允许重复元素存在,因此插入过程会自动过滤重复项。

3. 利用Map()


const arr = [9, 2, 9, '123', '123', true, NaN, true, false, false, undefined, undefined, NaN, {}, {}]
function getDisArray4(arr) {
    const map = new Map()
    const newArr = []
 
    arr.forEach(item => {
        if (!map.has(item)) { // has()用于判断map是否包为item的属性值
            map.set(item, true) // 使用set()将item设置到map中,并设置其属性值为true
            newArr.push(item)
        }
    })
 
    return newArr
}
 
getDisArray4(arr)   // [9, 2, '123', true, NaN, false, undefined, {…}, {…}]

注意:使用Map()也可对NaN去重,原因是Map进行判断时认为NaN是与NaN相等的,剩下所有其它的值是根据 === 运算符的结果判断是否相等;对 {} 不能检测

 

标签:Set,const,undefined,true,NaN,item,数组,方法,前端开发
From: https://www.cnblogs.com/hjbky/p/18309382

相关文章

  • 双栈:数组实现
    双栈:数组实现结构描述:#include<iostream>#include<cstdlib>#defineMAX100usingnamespacestd;typedefintDataType;classDoubleStack{public:DataType*A;//两个栈的栈顶intTP;intTB;//建立一个空栈voidInit();//判空、......
  • 栈:数组实现
    栈:数组实现结构描述:#defineMAX100typedefintDataType;classSeqStack{public:DataType*A;intTop;voidInit();voidPush(DataTypeX);voidPop();DataTypeGetTop();voidMakeEmpty();boolIsEmpty();boolIsFull()......
  • C++ 返回数组指针简单测试
    C++返回数组指针简单测试:#include<iostream>staticconstsize_tARR_SIZE=10;staticintarr[ARR_SIZE];//更新数组#defineUPDATE_ARR_DATA(i)for(size_tj=0;j<ARR_SIZE;++j)\{\a......
  • WCHNET_SocketSend返回0x11原因及解决方法
    问题描述:TCPCLIENT模式使用WCHNET_SocketSend发送有概率会返回0x11按wchnet.h定义为内存溢出错误。异常分析:通过WCHNET_QueryUnack查看,发现异常时发送队列或缓冲区已经占满,导致再次发送时报发送内存溢出错误。 解决方法:如果项目对RAM需求不大,可适当将WCHNET_NUM_TCP_SE......
  • AI绘画Stable Diffusion ,3种方法精确控制人物姿势,总有一种适合你
    前言在AI绘画软件stablediffusion中,控制人物姿势的方法有很多,最简单的方法是在提示词中加入动作提示词,比如Sit,walk,run(坐、走、跑)等,但如果想要精确控制人物姿势就比较难了,首先想要用语言精确描述一个姿势比较困难,另外stablediffusion生图姿势图就像抽盲盒一样具体有......
  • C 语言实例 - 数组拆分与合并
    将一个数组拆分为两个数组,一个为奇数数组,一个为偶数数组实例#include<stdio.h>intmain(){intarray[10]={0,1,2,3,4,5,6,7,8,9};inteven[10],odd[10];intloop,e,d;e=d=0;for(loop=0;loop<10;loop++){......
  • 掌握游戏录屏技巧:三种高效方法全解析
    在数字时代,游戏录屏已经成为众多游戏爱好者热衷的一项活动。无论是为了记录自己的精彩操作,还是为了分享给朋友或粉丝,游戏录屏都为我们提供了一个全新的视角去欣赏和回味游戏带来的乐趣。想要制作出精彩的游戏视频,一款优秀的游戏录屏软件是不可或缺的。通过录屏软件,我们可以......
  • 常用的性能优化方法
    性能优化是程序员工作必备的技能,下面分享一些经典的性能优化思路和方法。首先明确性能优化的定义和目标。性能优化是指通过持续的分析、实践和测试,确保系统稳定高效运行,从而满足用户的诉求。性能优化闭环:性能优化分类一般情况下,我们把性能优化分为2大类:1)通用优化是指一些......
  • Python数据可视化之numpy的11个常用的创建数组的函数
    numpy库在处理成千上万的数据时,Python的1维列表已经不适合来对数据进行处理,效率会很慢,所以numpy就诞生了,他可以将列表变成数组,而数组可以是1维、2维、3维甚至更高纬度,可用于存储和处理大型的矩阵,此外numpy提供了大量的数学函数,包括数学、逻辑、形态操作、排序、选择,输出和......
  • 获取数组中出现最多的元素
    1、方法一:需要三次循环,缺点:大量的循环操作会消耗大量的计算资源、代码多   constarr=['a','c','b','1','9','b','sdf','6','b','aaaa','汉字','汉字','sdf......