不管是在面试中还是在实际开发中我们经常见到数组去重,在这里小白为大家总结了一些去重的方式
-------------------------- 大家有好的方法可以分享 -------------------
1. 利用indexOf去重
let arr = [1,2,2,3,2,2,1,1,2,3];
// indexOf
//数组去重
function noRepeatArr(arr){
let list = [];
for(let i = 0,len = arr.length;i < len;i ++){
if(list.indexOf(arr[i]) === -1){
list.push(arr[i]); //[1,2,3]
}
}
return list;
}
noRepeatArr(arr)//[1,2,3]
2. 利用数组下标来判断
//数组下标判断法
function unique3(array){
var n = [array[0]]; //结果数组
for(var i = 1; i < array.length; i++) { //从第二项开始遍历
if (array.indexOf(array[i]) == i)
n.push(array[i]);
}
return n;
}
3. Set天然去重
//ES6
es6方法数组去重
arr=[...new Set(arr)];
//es6方法数组去重,第二种方法
function dedupe(array) {
return Array.from(new Set(array)); //Array.from()能把set结构转换为数组
}
4. 过滤判断下标方法
//这个方法是偶然间在网上看到的
// let arrChong = [1,2,3,2,4,5,1]
// let arrc = arrChong
arrChong = arrChong.filter((item,index)=>{
return arrc.indexOf(item,0) === index
})
arrChong // [1,2,3,4,5]
数组中对象去重
5. 通过对象.属性的方式来判断对象中是否存在key
var arr = [{"key":"小靳靳"}, {"key":"小靳靳"}, {"key":"小帅"}, {"key":"小帅03"}, {"key":"小帅"}];
var arrs = [];
var obj = {};
for (var i = 0; i < arr.length; i++) {
if (!obj[arr[i].key]) {
arrs.push(arr[i]);
obj[arr[i].key] = true;
}
}
console.log(arrs)
6. 通过findIndex查找key值
var arr = [{"01":"小靳靳"}, {"01":"小靳靳"}, {"02":"小帅"}, {"03":"小帅03"}, {"02":"小帅"}];
var arrs = [];
arr.map((item)=>{ //遍历数组
let index = arrs.findIndex((items)=>{ //查找key值,找不到返回-1
return items[Object.keys(items)] == item[Object.keys(item)]
})
if(index == -1){
arrs.push(item)
}
})
7. new map方法
// 数组对象去重
let arr = [
{
"name": "安徽省"
},
{
"name": "安徽省"
},
{
"name": "山西省"
}
]
const map = new Map();
for ( const item of arr ) {
if ( !map.has( item.name ) ) { //判断是否存在
map.set( item.name, item ); //设置属性,属性值
}
}
console.log( [...map.values()]) //[{name: '安徽省'},{name: '山西省'}]