js中数组去重方法及性能对比
js中数组的
数组去重
常用的数组去重方法以及效率分析:
首先我们先构建一个数组,主要是用于进行去重实验,我们主要实验的量级为1000,10000,100000,500000。具体的生成数组的方法如下:
function buildDataArr (size) {
var array = [];
for (var i =0; i< size; i++) {
var num = Math.round(Math.random() * size);
array.push(num);
}
return array;
}
var arr1 = buildDataArr(1000);
var arr2 = buildDataArr(10000);
var arr3 = buildDataArr(100000);
var arr4 = buildDataArr(500000);
通过使用filter和index 方法进行去重
function distinct(numberArr) {
return numberArr.filter((item, index)=> {
return numberArr.indexOf(item) === index
})
}
通过使用双重循环进行数组去重
function distinctFor(numberArr) {
for (let i=0, len=numberArr.length; i<len; i++) {
for (let j=i+1; j<len; j++) {
if (numberArr[i] == numberArr[j]) {
numberArr.splice(j, 1);
// splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
len--;
j--;
}
}
}
return numberArr
}
通过使用for…of 和include进行去重
function distinctInclude(numberArr) {
let result = []
for (let i of numberArr) {
!result.includes(i) && result.push(i)
}
return result
}
使用sort进行去重
function distinctSort(numberArr) {
numberArr = numberArr.sort()
let result = [numberArr[0]] for (let i=1, len=numberArr.length; i<len; i++) {
numberArr[i] !== numberArr[i-1] && result.push(numberArr[i])
}
return result
}
使用 new Set进行去重
function distinctSet(numberArr) {
return Array.from(new Set(numberArr))
}
使用对象进行去重
function distinctObj(numberArr) {
let result = []
let obj = {}
for (var i of numberArr) {
if (!obj[i]) {
result.push(i)
obj[i] = 1
}
}
return result
}
好了上面的方法介绍完了,我们来看一下性能:
| 1000 | 10000 | 100000 | 500000 | |
|---|---|---|---|---|
| distinctFilter | 0 | 40 | 3992 | 105859 |
| distinctFor | 2 | 59 | 5873 | 147234 |
| distinctInclude | 1 | 24 | 2320 | 54794 |
| distinctSort | 1 | 8 | 69 | 264 |
| distinctSet | 0 | 1 | 12 | 78 |
| distinctObj | 1 | 1 | 9 | 33 |
js中数组去重方法及性能对比的更多相关文章
- js中数组去重的几种方法
js中数组去重的几种方法 1.遍历数组,一一比较,比较到相同的就删除后面的 function unique(arr){ ...
- JS实现数组去重方法大总结
js数组根据对象中的元素去重: var arr2 = [ { name: "name1", num: "1" }, { name: "name2&qu ...
- JavaScript -- 时光流逝(二):js中数组的方法
JavaScript -- 知识点回顾篇(二):js中数组的方法 1. 数组 (1)定义数组,数组赋值 <script type="text/javascript"> ...
- JS中数组去重的九方法
数组去重方法 方法一:运用set结构特点:存储的数据没有重复的,结果为对象,再用Array.from()转换成数组 var arr = [1,1,2,1,3,4,5] ...
- js中数组去重的方法
在实际工作或面试中,我们经常会遇到"数组去重"问题,接下来就是使用js实现的数组去重的多种方法: 1.借助ES6提供的Set结构 var arr = [1,1,2,2,3,3,4, ...
- JS实现数组去重方法整理
前言 我们先来看下面的例子,当然来源与网络,地址<删除数组中多个不连续的数组元素的正确姿势> 我们现在将数组中所有的‘ a’ 元素删除: var arr = ['a', 'a', 'b', ...
- JS中数组的方法
1. join() Array.join() 是 String.split() 的逆向操作 var arr = [1, 2, 3] arr.join()// "1,2,3" arr ...
- JS实现数组去重方法总结(六种方法)
方法一: 双层循环,外层循环元素,内层循环时比较值 如果有相同的值则跳过,不相同则push进数组 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Array. ...
- js中数组去重
编写函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组 [注]正序去重,会漏掉一些元素. [注]去重倒序. var arr = [10, 20, 30, 40, 30, 20, 20 ...
随机推荐
- R 语言学习笔记(1)——R 工作空间与输入输出
什么是工作空间? 工作空间(workspace)就是当前 R 的工作环境,它储存着所有用户定义的对象(objectives)包括了向量.矩阵.函数.数据框.列表等. 处理 R 文件的工作流程 #设置当 ...
- Chapter 07-Basic statistics(Part4 t-tests&&nonparametric tests of group difference)
一. t-tests 这一部分我们使用分布在MASS包中的UScrime数据集.它是关于美国47个州在1960年时,关于惩罚制度对犯罪率的影响. Prob:监禁(坐牢)的概率: U1:14到24岁的城 ...
- 小白都会用的免配置 Aria2 图形界面版免费开源下载软件PDM
如今的迅雷真的越发让人失望,好好的下载软件变成了广告浏览器,最近又关停了“远程下载”功能,就算花钱加入会员,很多资源现在也不允许下载了,鸡肋的很. 然而除了 IDM.Folx.qBitorrent 等 ...
- 正则grep 使用介绍
第6周第3次课(4月25日) 课程内容: 9.1 正则介绍_grep上9.2 grep中9.3 grep下扩展把一个目录下,过滤所有*.php文档中含有eval的行grep -r --include= ...
- split分割(拆分)文件
split分割(拆分)文件 需求:指定文件大小拆分文件 # ll -h test/ |grep vmcore -rw-r--r-- 1 root root 12G 12月 7 00:20 vmco ...
- 请问1^x+2^x+3^x+\cdots +n^x的算式是什么呢?
目录 总结 请问\(1^x+2^x+3^x+\cdots +n^x\)的算式是什么呢? 一.求和式\(\sum\limits_{i=1}^n{i}\)的算式 如何证明求和简式\(\sum_{i=1}^ ...
- 了解 MongoDB 看这一篇就够了【华为云分享】
目录 一.简介 二.基本模型 BSON 数据类型 分布式ID 三.操作语法 四.索引 索引特性 索引分类 索引评估.调优 五.集群 分片机制 副本集 六.事务与一致性 一致性 小结 一.简介 Mong ...
- bash中$符号的一般用法
$一般用于获取变量的内容(字符串或数字等),用以构成命令version=$(uname -r).构成字符串echo "my name is $myname".进行算术运算等tota ...
- [TimLinux] Python C3 MRO
MRO:Method Resolution Order,即方法解析顺序,是python中用于处理二义性问题的算法 采用过的算法: 1. DFS(深度优先算法) 2. BFS(广度优先算法) 3. C3 ...
- hdu2199,double二分
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2199 题意:给一个Y,求满足8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y的 ...