Fork me on GitHub

数组去重

一、问题

如何对下面的数组进行去重:

1
var arr = [1, 2, 2, 2, 3, 3, 3, 4, 5, 6];

二、概念解析

  • indexOf(): 找到就返回下标,找不到就返回-1
  • filter(): 数组过滤方法,复制出原数组中符合条件的元素组成新数组返回。
    1
    2
    3
    var subArr=arr.filter(function(elem,i,arr){
    return 判断条件
    })

es5四种方式:

方式一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Array.prototype.unique_one = function () {
// 1. 定义临时数组
var temp = [];
// 2. 遍历当前数组
for (var i = 0; i < this.length; i++) {
// 3.如果当前数组的第i已经保存进了临时数组,
// 那么跳过,否则把当前项push到临时数组里面
if (temp.indexOf(this[i]) === -1) {
temp.push(this[i]);
}
}
return temp;
};
console.log("unique_one==>", arr.unique_one());

方式二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array.prototype.unique_two = function () {
//1. hash为hash表,temp为临时数组
var hash = {}, temp = [];
// 2.遍历当前数组
for (var i = 0; i < this.length; i++) {
// 3. 如果hash表中没有当前项
if (!hash[this[i]]) {
// 4.存入hash表
hash[this[i]] = true;
// 5.把当前数组的当前项
// push到临时数组里面
temp.push(this[i]);
}
}
return temp;
};
console.log("unique_two==>", arr.unique_two());

方式三: 字符串数组

1
var arr_str = ["h", "e", "l", "l", "o"];
1
2
3
4
5
6
7
8
9
10
Array.prototype.unique_three = function () {
var n = [this[0]];
for (var i = 1; i < this.length; i++) {
if (this.indexOf(this[i]) === i) {
n.push(this[i]);
}
}
return n;
};
console.log("unique_three==>", arr_str.unique_three());

方式四:

1
2
3
4
5
6
7
8
9
10
11
Array.prototype.unique_four = function () {
this.sort();
var re = [this[0]];
for (var i = 1; i < this.length; i++) {
if (this[i] !== re[re.length - 1]) {
re.push(this[i]);
}
}
return re;
};
console.log("unique_four==>", arr.unique_four());

方式五:

1
2
3
4
5
6
7
Array.prototype.unique_five = function () {
var res = this.filter((item, index) => {
return this.indexOf(item) === index;
})
return res;
}
console.log("unique_five==>", arr.unique_five());

es6实现方式:

1
2
3
4
5
6
7
/** 使用 ES6 语法中的 Set——数据集合 **/
function fun1() {
var set = new Set(arr);
return set;
}
var result1 = fun1();
console.log(result1);
坚持原创技术分享,您的支持将鼓励我继续创作!
-------------    本文结束  感谢您的阅读    -------------
0%