js 数组去重及性能比照

  • 时间:2021-03-20 20:24 作者:嘻哈章鱼小丸子 来源: 阅读:689
  • 扫一扫,手机访问
摘要:看了那么多博客,数组去重无非就 2 类:两层循环法 和 对象自身键不可重复。let arr1 = Array.from(new Array(100000), (item, index) = { return index;});let arr2 = Array.from(new Array(

看了那么多博客,数组去重无非就 2 类:两层循环法 和 对象自身键不可重复。

let arr1 = Array.from(new Array(100000), (item, index) => {     return index;});let arr2 = Array.from(new Array(50000), (item, index) => {     return index + index;});let arr = arr1.concat(arr2);

以上面的arr为例,分别进行测试:

一、两层循环法
  1. 两层 for 循环
for (let i = 0; i < arr.length; i++) {     for (let j = arr.length - 1; j > i; j--) {//倒数           if (arr[i] === arr[j]) {               arr.splice(j, 1);//splice 会改变数组的长度          }     }}
两层for 循环
  1. for + indexOf
let result = []for (var i = 0; i < arr.length; i++) {     if (result .indexOf(arr[i]) === -1) {         result .push(arr[i])     }}
for + indexOf
  1. for + includes
let result = []for (var i = 0; i < arr.length; i++) {     if (!result .includes(arr[i]) ) {         result .push(arr[i])     }}

for + includes
for 的变体如filterfor...offorEachmap等和for没差太多,此处不逐个例举。

  1. reduce
arr = arr.reduce((prev, cur) => (prev.includes(cur) ? prev : [...prev, cur]),[]);
reduce
二、对象自身键不可重复
  1. for + Object
let result = []let obj = {}for (var i = 0; i < arr.length; i++) {      const arrValue = arr[i];      if (!obj[arrValue]) {          result.push(arrValue);          obj[i] = 1;      }}
for...of + Object
  1. Set:2 种写法,性能差不多
arr= [...new Set(arr)] //或者arr= Array.from(new Set(arr)); 
Set
总结
  • 性能最优的是for + Object,其次是set 方法,推荐这两种。其余单层 for循环性能都差不多
  • reduce性能最差,慎用。双重for循环性能也较差,最好不用
参考文章

JS实现数组去重方法整理

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
【系统环境|】ZORRO佐罗软件安装教程及一键新机使用方法详细简介(2023-02-10 21:56)
【系统环境|】阿里云 centos 云盘扩容命令(2023-01-10 16:35)
【系统环境|】补单系统搭建补单源码搭建(2022-05-18 11:35)
【系统环境|服务器应用】高端显卡再度登上热搜,竟然是因为“断崖式”的降价(2022-04-12 19:47)
手机二维码手机访问领取大礼包
返回顶部