javascript数组去重的几种常见方法_前端数组去重的方法

javascript数组去重的几种常见方法_前端数组去重的方法JavaScript 高性能数组去重

大家好,又见面了,我是你们的朋友全栈君。

一、测试模版

数组去重是一个老生常谈的问题,网上流传着有各种各样的解法
为了测试这些解法的性能,我写了一个测试模版,用来计算数组去重的耗时

// distinct.js let arr1 = Array.from(new Array(100000), (x, index)=>{ return index }) let arr2 = Array.from(new Array(50000), (x, index)=>{ return index+index }) let start = new Date().getTime() console.log('开始数组去重') function distinct(a, b) { // 数组去重 } console.log('去重后的长度', distinct(arr1, arr2).length) let end = new Date().getTime() console.log('耗时', end - start) 复制代码

这里分别创建了两个长度为 10W 和 5W 的数组

然后通过 distinct() 方法合并两个数组,并去掉其中的重复项

数据量不大也不小,但已经能说明一些问题了

二、Array.filter() + indexOf

这个方法的思路是,将两个数组拼接为一个数组,然后使用

var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present']; const result = words.filter(word => word.length > 6); console.log(result); // expected output: Array ["exuberant", "destruction", "present"] 复制代码

遍历数组,并结合 indexOf 来排除重复项

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

这就是我被吐槽的那个数组去重方法,看起来非常简洁,但实际性能略差。

四、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 } 复制代码

这种方法和 filter + indexOf 挺类似

只是把 filter() 的内部逻辑用 for 循环实现出来,再把 indexOf 换为 includes

所以时长上也比较接近

本次给大家推荐一个最后给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。
对web开发技术感兴趣的同学,欢迎加入Q群:864305860,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

转载于:https://juejin.im/post/5bb8c6136fb9a05d082a378d

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107277.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月20日 下午6:20
下一篇 2022年4月20日 下午6:20


相关推荐

  • Java面试题

    Java面试题Java面试题

    2022年4月23日
    44
  • php 文字转unicode,php汉字如何转unicode

    php 文字转unicode,php汉字如何转unicodephp 汉字转 unicode 的方法 首先创建 PHP 示例代码文件 然后定义一个 unicode encode 方法 接着再创建一个 unicode decode 方法 最后通过定义好的方法进行转换即可 php 汉字转 unicodephp 汉字转 Unicode 编码函数 str 原始字符串 encoding 原始字符串的编码 默认 GBK prefix 编码后的前缀 默认 postfi

    2026年3月26日
    2
  • NSGA2算法中拥挤度计算代码[通俗易懂]

    NSGA2算法中拥挤度计算代码[通俗易懂]思想:    要对拥挤距离进行计算,则需要根据每个目标函数对种群中的所有个体按升序进行排序。第一个和最后一个个体的拥挤距离设为无穷大,第i个个体的拥挤距离则设为第i+1和第i个体的所有目标函数值之差的和。具体方法如下面伪代码:defcrowding_distance_assignment(I)nLen=len(I)#I中的个体数量…

    2022年5月19日
    48
  • SGU 319 Kalevich Strikes Back(线段树扫描线)

    SGU 319 Kalevich Strikes Back(线段树扫描线)

    2021年12月4日
    45
  • 向量积的坐标运算公式推导_向量积坐标表示公式

    向量积的坐标运算公式推导_向量积坐标表示公式展开全部表示方法两个向量 a 和 b 的叉积写作 a b 有时也被写成 a b 避免 e78988e69d63 和字母 x 混淆 定义向量积可以被定义为 模长 在这里 表示两向量之间的夹角 共起点的前提下 0 180 它位于这两个矢量所定义的平面上 方向 a 向量与 b 向量的向量积的方向与这两个向量所在平面垂直

    2026年3月19日
    2
  • SQL中like的用法.[通俗易懂]

    SQL中like的用法.[通俗易懂]Like的运用场合主要在模糊查询的时候,一般以查询字符串居多,这里据一些例子来说他的一般用法:例1,查询name字段中包含有“明”字的。这里不要使用*来代替,一般在使用0个或者任意个字符构成的字符

    2022年7月4日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号