博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript数组去重的几种方法
阅读量:6224 次
发布时间:2019-06-21

本文共 1792 字,大约阅读时间需要 5 分钟。

数组去重复是一个常见的需求,我们暂时考虑同类型的数组去重复。主要是理清思路和考虑下性能。以下方法,网上基本都有,这里只是简单地总结一下。

思路:

  1. 遍历数组,一一比较,比较到相同的就删除后面的
  2. 遍历数组,一一比较,比较到相同的,跳过前面重复的,不相同的放入新数组
  3. 任取一个数组元素放入新数组,遍历剩下的数组元素任取一个,与新数组的元素一一比较,如果有不同的,放入新数组。
  4. 遍历数组,取一个元素,作为对象的属性,判断属性是否存在

1. 删除后面重复的:

 
function
ov1(arr){
//
var a1=((new Date).getTime())
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
--
;}
//
console.info((new Date).getTime()-a1)
return
arr.sort(
function
(a,b){
return
a
-
b});
}

2. 这个是常规的方法,比较好理解,如果相同则跳出循环

 
function
ov2(a) {
//
var a1=((new Date).getTime())
var
b
=
[], n
=
a.length, i, j;
for
(i
=
0
; i
<
n; i
++
) {
for
(j
=
i
+
1
; j
<
n; j
++
)
if
(a[i]
===
a[j]){j
=
false
;
break
;}
if
(j)b.push(a[i]);
}
//
console.info((new Date).getTime()-a1)
return
b.sort(
function
(a,b){
return
a
-
b});
}

3. 这个我花了好长时间明白的,这里j循环虽然继续了,但是i值已经改变了。就等于是一个新的i循环:

 
function
ov3(a) {
//
var a1=((new Date).getTime())
var
b
=
[], n
=
a.length, i, j;
for
(i
=
0
; i
<
n; i
++
) {
for
(j
=
i
+
1
; j
<
n; j
++
)
if
(a[i]
===
a[j])j
=++
i
b.push(a[i]);}
//
console.info((new Date).getTime()-a1)
return
b.sort(
function
(a,b){
return
a
-
b});
}

4. 保证新数组中的都是唯一的

 
function
ov4(ar){
//
var a1=((new Date).getTime())
var
m
=
[],f;
for
(
var
i
=
0
;i
<
ar.length;i
++
){
f
=
true
;
for
(
var
j
=
0
;j
<
m.length;j
++
)
if
(ar[i]
===
m[j]){f
=
false
;
break
;};
if
(f)m.push(ar[i])}
//
console.info((new Date).getTime()-a1)
return
m.sort(
function
(a,b){
return
a
-
b});
}

5. 用对象属性

 
function
ov5(ar){
//
var a1=(new Date).getTime()
var
m,n
=
[],o
=
{};
for
(
var
i
=
0
;(m
=
ar[i])
!==
undefined;i
++
)
if
(
!
o[m]){n.push(m);o[m]
=
true
;}
//
console.info((new Date).getTime()-a1)
return
n.sort(
function
(a,b){
return
a
-
b});;
}

转载于:https://www.cnblogs.com/jkyweb/archive/2011/06/29/2093130.html

你可能感兴趣的文章
自己动手开发IOC容器
查看>>
hdparm
查看>>
[LeetCode] Best Time to Buy and Sell Stock
查看>>
《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)
查看>>
C++11学习
查看>>
【java】java工具类StringUtils,org.apache.commons.lang3.StringUtils
查看>>
WPF太阳、地球、月球运动轨迹模拟
查看>>
Getting Started with Scala
查看>>
curl != casperjs ? - Google Groups
查看>>
Oracle从字符串资源中得到想要的数据分析
查看>>
敏捷开发中的Code Review
查看>>
事务 commit
查看>>
{右键我的电脑无法打开计算机管理}解决方法
查看>>
如何获取和发送Http请求和相应
查看>>
【HeadFirst 设计模式学习笔记】4 工厂模式
查看>>
CentOS6.4 安装mysql cmake的参数说明
查看>>
创新型政府网站群建设
查看>>
sql server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件...
查看>>
notepad++下载Subversion插件,显示intalltion of subversion failed
查看>>
Internationalization composition diagram
查看>>