当前位置: 首页 > news >正文

JS中数组去重的几种方法

JS 中有多种方法可以实现数组去重,下面是几种常用的方法:

1、使用 Set 去重:Set 数据结构中不能有重复元素,可以将数组转成 Set 类型,再转回数组。

let arr = [1,2,3,4,5,6,2,3,4];
let uniqueArr = [...new Set(arr)];
console.log(uniqueArr);  // [1, 2, 3, 4, 5, 6]

2、使用 Array.prototype.filter() 去重: filter() 函数可以过滤数组中不符合条件的元素,可以用来去重。

let arr = [1,2,3,4,5,6,2,3,4];
let uniqueArr = arr.filter((item, index, array) => array.indexOf(item) === index);
console.log(uniqueArr);  // [1, 2, 3, 4, 5, 6]

3、使用 for 循环和 indexOf() 去重: 遍历数组,判断当前遍历到的元素在数组中第一次出现的位置是否和当前遍历到的位置相同,如果不同说明该元素之前出现过,则舍去。

let arr = [1,2,3,4,5,6,2,3,4];
let uniqueArr = [];
for(let i = 0; i < arr.length; i++) {if(uniqueArr.indexOf(arr[i]) === -1) {uniqueArr.push(arr[i]);}
}
console.log(uniqueArr);  // [1, 2, 3, 4, 5, 6]

4、使用 Object 键值对去重:遍历数组,将数组元素当作对象的键,如果该键不存在,则将其添加到新数组中。

let arr = [1,2,3,4,5,6,2,3,4];
let uniqueArr = [], obj = {};
for(let i = 0; i < arr.length; i++) {if(!obj[arr[i]]) {uniqueArr.push(arr[i]);obj[arr[i]] = true;}
}
console.log(uniqueArr);  // [1, 2, 3, 4, 5, 6]

5、使用 Array.prototype.reduce() 去重: reduce() 函数可以用来构建新数组,只添加没有出现过的元素。

let arr = [1,2,3,4,5,6,2,3,4];
let uniqueArr = arr.reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], []);
console.log(uniqueArr);  // [1, 2, 3, 4, 5, 6]

6、使用 Map 去重: Map 数据结构中不能有重复元素,可以将数组转成 Map类型,再转回数组。

let arr = [1,2,3,4,5,6,2,3,4];
let uniqueArr = Array.from(new Map(arr.map(item => [item, item])).values());
console.log(uniqueArr);  // [1, 2, 3, 4, 5, 6]

7、使用 Array.prototype.includes() 去重: 遍历数组,判断当前遍历到的元素是否存在于新数组中,如果不存在则将其添加到新数组中。

let arr = [1,2,3,4,5,6,2,3,4];
let uniqueArr = [];
for(let i = 0; i < arr.length; i++) {if(!uniqueArr.includes(arr[i])) {uniqueArr.push(arr[i]);}
}
console.log(uniqueArr);  // [1, 2, 3, 4, 5, 6]

8、使用 Array.prototype.sort() 去重: sort 方法可以将数组元素排序,可以将相邻的重复元素放在一起,然后遍历数组将不同的元素放入新数组中。

let arr = [1,2,3,4,5,6,2,3,4];
let uniqueArr = arr.sort().filter(function (item, index, array) {return !index || item !== array[index - 1];
});
console.log(uniqueArr);  // [1, 2, 3, 4, 5, 6]

9、使用第三方库 lodash 的 uniq() 去重。

10、使用第三方库 Ramda 的 uniq() 去重。

http://www.lryc.cn/news/38438.html

相关文章:

  • Nginx 配置实例-负载均衡
  • 引出生命周期、生命周期_挂载流程、生命周期_更新流程、生命周期_销毁流程、生命周期_总结——Vue
  • C++ STL学习之【vector的使用】
  • 方差分析与单因素方差分析
  • 分布式链路追踪组件skywalking介绍
  • SUBMIT的用法
  • 网页基本标签、图像标签、链接标签、块内元素和块元素、列表标签、表格标签
  • RxJava操作符变换过程
  • 开放平台订单接口
  • CDN相关知识点
  • 【论文阅读】注意力机制与二维 TSP 问题
  • [深入理解SSD系列 闪存实战2.1.7] NAND FLASH基本编程(写)操作及原理_NAND FLASH Program Operation 源码实现
  • PMP项目管理项目资源管理
  • 程序的编译和链接
  • Win11的两个实用技巧系列之无法联网怎么办、耳机没声音的多种解决办法
  • 【微信小程序】-- 自定义组件 - 数据监听器 - 案例 (三十五)
  • Linux - 第7节 - 进程间通信
  • # 数据完整性算法在shell及python中的实践
  • QEMU启动x86-Linux内核
  • C/C++每日一练(20230311)
  • 哪个牌子的洗地机耐用?耐用的洗地机推荐
  • 搭建一个中心化的定时服务
  • 【CSS】快速入门笔记
  • 第161篇 笔记-去中心化的含义
  • 「计算机组成原理」数据的表示和运算(二)
  • 建立自己的博客
  • Docker 安装mysql Mac 环境下
  • 《C++代码分析》第三回:类成员函数覆盖父类函数的调用(分析this指针的变化)
  • Altium designer--软件简介及安装教程(Altium designer16)
  • Windows系统下基于开源软件的多物理场仿真