本文为工具方法,提供简单但常用的js方法函数。
本文内容来自不同的网友分享。

for…of + Object

首先创建一个空对象,然后用 for 循环遍历
利用对象的属性不会重复这一特性,校验数组元素是否重复

function distinct(a, b) {let arr = a.concat(b)let result = []let obj = {}for (let i of arr) {if (!obj[i]) {result.push(i)obj[i] = 1}}return result
}

new Set()

ES6 新增了 Set 这一数据结构,类似于数组,但 Set 的成员具有唯一性
基于这一特性,就非常适合用来做数组去重了

function distinct(a, b) {return Array.from(new Set([...a, ...b]))
}

Array.sort()

首先使用 sort() 将数组进行排序
然后比较相邻元素是否相等,从而排除重复项

function distinct(a, b) {let arr = a.concat(b)arr = arr.sort()let result = [arr[0]]for (let i=1, len=arr.length; i<len; i++) {arr[i] !== arr[i-1] && result.push(arr[i])}return result
}

for…of + includes()

双重for循环的升级版,外层用 for…of 语句替换 for 循环,把内层循环改为 includes()
先创建一个空数组,当 includes() 返回 false 的时候,就将该元素 push 到空数组中
类似的,还可以用 indexOf() 来替代 includes()

function distinct(a, b) {let arr = a.concat(b)let result = []for (let i of arr) {!result.includes(i) && result.push(i)}return result
}

双重 for 循环

最容易理解的方法,外层循环遍历元素,内层循环检查是否重复
当有重复值的时候,可以使用 push(),也可以使用 splice()

function distinct(a, b) {let arr = a.concat(b);for (let i=0, len=arr.length; i<len; i++) {for (let j=i+1; j<len; j++) {if (arr[i] == arr[j]) {arr.splice(j, 1);// splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一len--;j--;}}}return arr
}

Array.filter() + indexOf

function distinct(a, b) {let arr = a.concat(b);return arr.filter((item, index)=> {return arr.indexOf(item) === index})
}

硬核干货来啦:Js数组去重,赶快收藏吧相关推荐

  1. 硬核干货来了!手把手教你实现热力图!

    以下内容转载自腾讯位置服务公众号的文章<硬核干货来了!鹅厂前端工程师手把手教你实现热力图!> 作者:腾讯位置服务 链接:https://mp.weixin.qq.com/s/bgS7uFl ...

  2. js数组去重(多种方法)

    1 // js数组去重 2 Array.prototype.fun1 = function(){ 3 var arr = this, 4 result = [], 5 i, 6 len = arr.l ...

  3. JS数组去重的6种算法实现

    1.遍历数组法 最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法"indexOf"是ECMAScript5 方法 ...

  4. js数组去重解决方案

    js数组去重解决方案 参考文章: (1)js数组去重解决方案 (2)https://www.cnblogs.com/yxqd/p/10381932.html 备忘一下.

  5. JS数组去重方法记录

    js数组去重方法 1.遍历数组,建立新数组,利用indexOf判断是否存在于新数组中,不存在则push到新数组,最后返回新数组 代码如下(示 例): function getArray(ar) {va ...

  6. JS数组去重方法小结

    JS数组去重 看了网上很多数组去重方法,用的比较常见的大概就几种,今天想自己来做一个总结. 部分内容参考该博客 1 . 在原数组上操作(基本方法) 思路:利用循环嵌套,判断数组中每个元素与其后面的元素 ...

  7. JS数组去重算法实现

    1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法"indexOf"是ECMAScript5 方 ...

  8. e站app里站hosts_硬核干货区 | E站的国际站运营知识星球上线啦

    朋友们大家好,E站已上线了知识星球内容库和问答圈,以阿里国际站,Wordpress自建站,Google SEO的更新内容为主,用原理技术的视角+全栈运营的思维去加成对店铺的运营和优化,知道为什么要这样 ...

  9. 硬核干货:网易云音乐如何做产品创新

    网易云音乐是大家非常熟悉和喜欢的一款产品,作为一个音乐类应用,成功融合进了社交等元素,满足了多样化的用户需求.那么今天产品系就带大家揭秘网易云音乐是怎样做产品的,而揭秘者正是网易云音乐的产品总监沈博文 ...

  10. 【硬核干货】4500字、10个案例分享几个Python可视化小技巧,助你绘制高质量图表...

    大家好,这里是俊欣,又是新的一周,好吧,打工人真的是太苦了 一般在Python当中,我们用于绘制图表的模块最基础的可能就是matplotlib了,今天小编分享几个用该模块进行可视化制作的技巧,帮助你绘 ...

最新文章

  1. LeetCode简单题之比赛中的配对次数
  2. ARM GCC Inline Assembler Cookbook
  3. Gem5在全系统(FS)模式下运行自己的测试程序
  4. Java(19)JDBC
  5. Java多线程基础学习一:线程的6种状态和相互转化
  6. UltraEdit搭建python IDE环境+设置快捷键
  7. php中ignore_user_abort函数的用法(定时)
  8. IEC_60068-2-64基本环境试验规程第2-64部分试验试验Fh振动、宽带随机抽样
  9. ArcMap提取不规则线的坐标
  10. 华为手机怎样才算激活了_华为手机激活是怎么回事
  11. iframe是什么?iframe用法详解
  12. 计算机二级vb考试查分,计算机二级vb考试分值
  13. MySql 删除索引
  14. Web of Science 数据库导出记录中各个字段的含义
  15. IDEA Java 死锁
  16. 【Java基础】【案例】
  17. 别瞎惊叹常识而已--5个前向实操过程分析
  18. 在GitLab中集成Azure Kubernetes
  19. 创意黑板粉笔字效果PPT模板
  20. ASO优化之什么是应用程序本地化

热门文章

  1. DSP_Builder设计方法说明_SinWave
  2. 《纽约邮报》手机客户端推送系统被黑 黑客发送抒情诗
  3. 通过微信查找SAP TCODE代码
  4. Mac 苹果OS X小技巧:如何更改文件的默认打开方式
  5. PHP 判断常量,变量和函数是否存在
  6. 14.软件架构设计:大型网站技术架构与业务架构融合之道 --- 业务架构思维
  7. 64.Linux/Unix 系统编程手册(下) -- 伪终端
  8. 56. Yii Modules
  9. 33. 深入解析互联网协议的原理
  10. 4. Phpstorm svn