采用6种方法对于数组arr = [1,2,3,4,3,2,1]进行去重,欢迎大家多多补充更多的方法。有积累才有成长~
1.循环
①采用forEach循环实现,利用了数组方法arr.includes和arr.push。
var arr = [1,2,3,4,3,2,1]
console.log('原数组:'+arr);
function foo(arr2){
let arr1 = []
arr2.forEach((val) =>{
if(!arr1.includes(val)){
arr1.push(val)
}
})
return arr1;
}
console.log('forEach方法数组去重后:'+foo(arr));
控制台输出如下:
②采用双层for循环的方法对数组进行去重。运用了数组方法arr.splice删除重复的元素并修改原数组。具体方法讲解可查看w3school手册。
var arr = [1,2,3,4,3,2,1]
console.log('原数组:'+arr);
function foo1(arr1){
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--;
}
}
}
return arr1
}
console.log('双层for循环方法数组去重后:'+foo1(arr));
控制台输出如下:
③采用单层for循环进行数组遍历。利用数组方法arr.indexOf进行数组的去重。
var arr = [1,2,3,4,3,2,1]
console.log('原数组:'+arr);
function foo2(arr1){
var arr2 = []
for(var i = 0;i<arr1.length;i++){
if(arr2.indexOf(arr1[i]) == -1){
arr2.push(arr1[i])
}
}
return arr2
}
console.log('单层for循环方法数组去重后:'+foo2(arr));
控制台输出如下:
2.排序
先将数组进行排序,再利用循环判断实现数组去重。
var arr = [1,2,3,4,3,2,1]
console.log('原数组:'+arr);
function foo4(arr1){
arr1 = arr1.sort()
console.log('排序后数组为:'+arr1);
var arr2 = []
for(var i = 0;i<arr1.length-1;i++){
arr2[0] = arr1[0]
if(arr1[i] != arr1[i+1]){
arr2.push(arr1[i+1]);
}
}
return arr2;
}
console.log('利用排序实现数组去重后:'+foo4(arr));
控制台输出如下:
3.添加到空对象
因为对象中的变量不能重复,利用这一特点,我们将数组元素添加到空对象中,从而实现数组去重。
var arr = [1,2,3,4,3,2,1]
console.log('原数组:'+arr);
function foo5(arr1){
var obj = {}
for(var i = 0;i<arr1.length;i++){
if(obj[arr1[i]]){
obj[arr1[i]] = obj[arr1[i]] + 1;
}else{
obj[arr1[i]] = 1
}
}
return Object.keys(obj)
}
console.log('添加到空对象中实现数组去重后:'+foo5(arr));
控制台输出如下:
4.set
还可以采用es6中的set的方法实现数组去重,set方法不允许数组中存在重复值。利用set方法后得到的是伪数组。将伪数组转换为数组有两种方式 :①.Array.from() ②.[...]扩展数组。
var arr = [1,2,3,4,3,2,1]
console.log('原数组:'+arr);
function foo3(arr2){
var arr1 = new Set(arr2)
return [...arr1]
}
console.log('set方法实现数组去重后:'+foo3(arr));
控制台输出如下:
5.filter方法
利用filter方法,返回符合条件的所有元素。
var arr = [1, 2, 3, 4, 3, 2, 1];
console.log('原数组为:'+arr);
function foo(arr2) {
return arr2.filter((val, index) => {
return arr2.indexOf(val) === index;
})
}
console.log('利用filter数组去重后:'+foo(arr));
控制台输出如下: