JavaScript数组的去重
数组的去重
定义一个空数组,将原来的数组遍历,然后去空数组中比较,如果没有就push进去
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script>
var array = [6, 2, 6,3, 8, 1, 9,];
var tmp = []
for(var i = 0;i<array.length;i++) {
if(i === 0) tmp.push(array[i])
var isPush = true;
for(var k = 0;k< tmp.length; k++) {
if(array[i] === tmp[k]) {
isPush = false;
break;
}
}
if(isPush) tmp.push(array[i]);
}
console.log(tmp) // [1, 2, 6, 3, 8, 9]s
</script>
定义一个空数组,遍历原数组数组,将数组的当前项与其他项对比,如果没有则push进去
1
2
3
4
5
6
7
8
9
10
var tmp2 = [];
for(var i = 0; i < array.length; i++) {
for(var k = i+1; k< array.length; k++) {
if(array[i] === array[k]) {
k = ++i;
}
}
tmp2.push(array[i]);
}
console.log(tmp2)// [2, 6, 3, 8, 1, 9]
遍历原来的数组,当前项与剩下的项一一比较,如果发现相同,则将原来的项删除,可以运用splice方法
1
2
3
4
5
6
7
8
9
10
11
12
var array1 = [6, 2, 6,3, 8, 1, 9];
var len = array1.length;
for(var i = 0; i < len; i++) {
for(var k = i+1; k< len; k++) {
if(array[i] === array[k]) {
array1.splice(k,1)
len--;
}
}
}
console.log(array1)// [6, 2, 3, 8, 1, 9]
根据对象的特性来,对象里面属性的名称是不能重复的,遍历数组,将每个值作为对象的属性,先检测对象的属性是否存在,如果存在,将属性值设置为true,否则push到空数组中
1
2
3
4
5
6
7
8
9
10
var array2 = [6, 2, 6,3, 8, 1, 9];
var tmp = []
var obj = {};
for(var i = 0;i < array2.length;i++) {
if(obj[array2[i]] === undefined) {
tmp.push(array2[i]);
obj[array2[i]] = true;
}
}
console.log(tmp);// [6, 2, 3, 8, 1, 9]
将数组先排序,然后任意取一项,跟前面或者后面的对比,如果发现相同,则移除比较项
1
2
3
4
5
6
7
8
9
var array3 = array2.sort(function(a,b){
return a-b;
})
for(var i = 0;i < array3.length;i++) {
if(array3[i] === array3[i+1]) {
array3.splice(i,1)
}
}
console.log(array3);// [1, 2, 3, 6, 8, 9]
利用数组的indexOf方法, 它可以接收两个参数,第一个是查找值,第二个是查找的起点位置,如果返回-1,可以将它push进新数组
1
2
3
4
5
6
7
8
9
var tmp = [];
var array4 = [6, 2, 6,3, 8, 1, 9];
for(var i = 0;i < array4.length;i++) {
var index = tmp.indexOf(array4[i])
if(index === -1) {
tmp.push(array4[i])
}
}
console.log(tmp);// [6, 2, 3, 8, 1, 9]
利用ES6中的set对象,set对象中的每个值都是唯一的
1
2
3
var array = [1,2,3,4,4]
var tmp = Array.from(new Set(array));
console.log(tmp) // [1,2,3,4]
Array.from
方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)
利用ES6中的拓展运算符
1
2
3
var array = [1,2,3,4,4];
var tmp = [...new Set(array)];
console.log(tmp) // [1,2,3,4]
This post is licensed under CC BY 4.0 by the author.