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

常见的几种数组去重的方法,总有一种适合你~

又到了一年一度的换工作的旺季,今天在这里整理了几种常见的数组去重的方法,希望能对求职或者工作中的你提供一点帮助~~

方法1:是代码量看起来最少最简洁的方法了,利用ES6的set方法来实现的。

function unique1(arr) {
    return Array.from(new Set(arr))
}

方法2: 双层for循环,利用slice方法截取重复的部分。

function unique2(arr) {
    for(var i=0; i<arr.length;i++) {
    for( var j=i+1; j<arr.length;j++) {
        if(arr[i] == arr[j]) {
        arr.splice(j, 1);
        j--;
            }
        }
    }
    return arr;
}            

方法3:利用indexOf去重

function unique3(arr) {
    if( !Array.isArray(arr)) {
        return 'type error';
    }
    var newArr = [];
    for(var i =0; i<arr.length; i++) {
        if(newArr.indexOf(arr[i]) === -1) {
	    newArr.push(arr[i])
	}
    }
    return newArr;
}    

方法4: 先利用sort方法,对每个元素按照字符编码顺序进行排序,再比对前后是否重复

function unique4(arr) {
    if(!Array.isArray(arr)) {
        return 'type error';        
    }
    arr = arr.sort();
    let newArr = [arr[0]];
    for( var i = 1; i<arr.length;i++) {
        if( arr[i] !== arr[i-1]) {
             newArr.push(arr[i]);
        }
    }
    return newArr;
}        

方法5: 利用对象属性不能重复的特点巧妙对数组进行去重

function unique5(arr) {
    if(!Array.isArray(arr)) {
        return 'type error';
    }
    let temp = {},
        newArr = [],
        len = arr.length;
    for( let i = 0;i< len; i++) {
        if(!temp[arr[i]]) {
            temp[arr[i]] = 'aa';
            newArr.push(arr[i]);
        }
    }
    return newArr;
}                

方法6: 最后一种利用reduce方法逼格满满啊~~不熟悉此方法的小伙伴可以先了解下reduce的API。

function unique6(arr) {
    if(!Array.isArray(arr)) {
        return 'type error';
    }
    let newArr = arr.reduce((pre, cur) => {
        if(!pre.includes(cur)) {
            return pre.concat(cur)
        } else {
            return pre
        }
    }, [])
    return newArr;
}        

 

转载于:https://www.cnblogs.com/linxing/p/10476637.html

相关文章:

  • Python网络爬虫5 - 爬取QQ空间相册
  • 数据库插入10000000数据
  • 聊天宝彻底凉了,遭罗永浩抛弃,团队就地解散
  • 在win10上安装Linux系统安装
  • OSChina 周四乱弹 —— 你自己喜欢什么样的袜子
  • 中台之上(八):企业级业务架构的实现需要不断沟通和调整
  • 【译】Css Grid VS Flexbox: 实践比较
  • SecureCRT设置linux终端显示颜色
  • 一封奇怪的信--网易游戏(互娱)2019年-游戏测试开发工程师真题
  • SonarQube安装配置
  • EasyUI中使用textbox赋值,setValue和setText顺序问题
  • 一个java小程序,盗取插入的U盘中的数据。
  • spring-data-jpa
  • react-hooks 实现简单的评论list
  • Proxy-Go v7.2 发布,一个端口一键开启 http(s)\ss\socks 服务
  • 345-反转字符串中的元音字母
  • es的写入过程
  • isset在php5.6-和php7.0+的一些差异
  • JDK9: 集成 Jshell 和 Maven 项目.
  • leetcode46 Permutation 排列组合
  • Terraform入门 - 1. 安装Terraform
  • vue--为什么data属性必须是一个函数
  • 关于 Cirru Editor 存储格式
  • 警报:线上事故之CountDownLatch的威力
  • 前嗅ForeSpider教程:创建模板
  • 深度学习在携程攻略社区的应用
  • 智能合约开发环境搭建及Hello World合约
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #stm32整理(一)flash读写
  • (1)(1.13) SiK无线电高级配置(六)
  • (26)4.7 字符函数和字符串函数
  • (libusb) usb口自动刷新
  • (转)C#调用WebService 基础
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .netcore 获取appsettings
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • .sh
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /etc/fstab 只读无法修改的解决办法
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • []我的函数库
  • [20170713] 无法访问SQL Server
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [Android Pro] Notification的使用
  • [BZOJ 3282] Tree 【LCT】
  • [EFI]Dell Inspiron 15 5567 电脑 Hackintosh 黑苹果efi引导文件
  • [FC][常见Mapper IRQ研究]
  • [hdu 2896] 病毒侵袭 [ac自动机][病毒特征码匹配]
  • [IDF]被改错的密码