JavaScript 数组去重的几种方法

1. 双重for循环

      改变原数组

var arr=['h','e','l','l','o','2',1,2,1,3,2];

for(var i=0; i

2. 利用sort方法  

      会改变原数组以及数组元素顺序

var arr=['h','e','l','l','o','2',1,2,1,3,2];

arr.sort(function(a,b) { return a-b; } );
for(var i=0; i

3. 利用空对象

      不改变原数组,利用新数组存储去重后的数组。

/*
    补充知识
*/
//Object.prototype.toString.call() 返回数据类型
//在对象中如:
var obj_temp={
    1:'hello'
}
console.log(obj_temp[1]);  // hello
console.log(obj_temp['1']);// hello
console.log(Object.prototype.toString.call(1));   // [object Number]
console.log(Object.prototype.toString.call('1'));  // [object String]

//以上结果可以得出,会分不清1和'1',因此下面需要使用Object.prototype.toString.call()。

//去重
var arr=['h','e','l','l','o','2',1,2,1,3,2];
var quchong=[];
var obj={};

for(var i=0; i

4. 利用数组indexOf方法

      indexOf():判断此元素在该数组中首次出现的位置下标与循环的下标是否相等。

1)for循环。    不改变原数组,利用新数组存储去重后的数组。

var arr=['h','e','l','l','o','2',1,2,1,3,2];
var quchong=[];

for(var i=0; i

2)filter()方法。    不改变原数组,利用新数组存储去重后的数组。

var arr=['h','e','l','l','o','2',1,2,1,3,2];
var quchong=[];

//方式一:
quchong = arr.filter(function(item,index,array) {
    return quchong.indexOf(item) == -1 ? quchong.push(item) : '';
});
console.log(quchong);  // [ "h", "e", "l", "o", "2", 1, 2, 3 ]

//方式二:
quchong = arr.filter(function(item,index,array) {
    return array.indexOf(item) == index;
});
console.log(quchong); // [ "h", "e", "l", "o", "2", 1, 2, 3 ]

3)forEach()方法。    不改变原数组,利用新数组存储去重后的数组。

var arr=['h','e','l','l','o','2',1,2,1,3,2];
var quchong=[];

arr.forEach(function(item,index,array) {
    if (quchong.indexOf(item) == -1) {
	quchong.push(item);
    }
});
console.log(quchong); // [ "h", "e", "l", "o", "2", 1, 2, 3 ]

4)map()方法。    不改变原数组,利用新数组存储去重后的数组。

var arr=['h','e','l','l','o','2',1,2,1,3,2];
var quchong=[];

arr.map(function(item, index, array) {
    if (quchong.indexOf(item) == -1) {
	quchong.push(item);
    }
})
console.log(quchong); // [ "h", "e", "l", "o", "2", 1, 2, 3 ]

5. 利用ES6的Set

     Set数据结构,它类似于数组,其成员的值都是唯一的。

1)利用Array.from将Set结构转换成数组。  不改变原数组,利用新数组存储去重后的数组。

var arr=['h','e','l','l','o','2',1,2,1,3,2];
var quchong=[];

function quchong_fnc(arr){
    return Array.from(new Set(arr));
}
quchong = quchong_fnc(arr);
console.log(quchong);  // [ "h", "e", "l", "o", "2", 1, 2, 3 ]

2)拓展运算符(...)内部使用for...of循环。  不改变原数组,利用新数组存储去重后的数组。

var arr=['h','e','l','l','o','2',1,2,1,3,2];
var quchong=[];

function quchong_fnc(arr){
    return [...new Set(arr)];
}
quchong = quchong_fnc(arr);
console.log(quchong);  // [ "h", "e", "l", "o", "2", 1, 2, 3 ]

 

你可能感兴趣的:(javaScript)