js 手写数组去重
1、通过遍历原数组和新数组是否重复。new一个新数组存放已经遍历过的、唯一的元素。
function uniqueArr(list){
var newArr= [list[0]];
for(var i=1;i<list.length;i++){
var isRepeat = false;
for(var j=0;j<newArr.length;j++){
if(list[i] == newArr[j]){
isRepeat= true;
break;
}
}
if(!isRepeat){
newArr.push(list[i]);
}
}
return newArr;
}
var arr=['a','b','c','a','b'];
uniqueArr(arr); //output:["a", "b", "c"]
var arr=[1,1,1,'1']; uniqueArr(arr); //output:[1]
var arr=[1,1,1,'1',,,,]; uniqueArr(arr); //output:[1,undefined]
2、通过先排序,再与相邻的元素进行比较去重(排序之后相同的元素会相邻)
function uniqueArr(list){
list.sort();//对数组进行排序
var newArr= [];
for(var i=1;i<list.length;i++){
if(list[i]!==list[i+1]) newArr.push(list[i]);
}
return newArr;
}
var arr=['a','b','c','a','b'];
uniqueArr(arr); //output:["a", "b", "c"]
var arr=[1,1,,,1,'1']; uniqueArr(arr); //output:["1",1]
3、新建一个对象进行存放,再遍历数组,判断对象是否存在该值(obj[i])
function uniqueArr(list){
var obj= {},newArr=[list[0]];
obj[list[0]]=true;
for(var i=1;i<list.length;i++){
if(!obj[list[i]]){
obj[list[i]]=true;
newArr.push(list[i]);
}
}
return newArr;
}
var arr=['a','b','c','a','b'];
uniqueArr(arr); //output:["a", "b", "c"]
var arr=[1,1,,,1,'1']; uniqueArr(arr); //output:[1,undefined]
4、通过indexOf进行判断(新建一个数据存放唯一的元素,遍历原数组判断(newArr.indexOf(oldArr[i])==-1))
function uniqueArr(list){
var newArr=[list[0]];
for(var i=1;i<list.length;i++){
if(newArr.indexOf(list[i])==-1){
newArr.push(list[i]);
}
}
return newArr;
}
var arr=['a','b','c','a','b'];
uniqueArr(arr); //output:["a", "b", "c"]
var arr=[1,1,,,1,'1']; uniqueArr(arr); //output:[1, undefined, '1']
5、使用ES6 SET数据结构进行去重:
function dedupe(array) {
return Array.from(new Set(array));
}
dedupe([1, 1, 2, 3]) // [1, 2, 3]
dedupe([1, '1',,, 2, 3]) // [1, '1', undefined, 2, 3]
6、通过indexof与filter 进行去重
function distinct(numberArr) {
return numberArr.filter((item, index) => {
return numberArr.indexOf(item) === index
})
}
var arr=[1,1,,,1,'1'];
distinct(arr); //[1, '1']
7、通过使用for…of 和include进行去重
function distinctInclude(numberArr) {
let result = []
for (let i of numberArr) {
!result.includes(i) && result.push(i)
}
return result
}
var arr=[1,1,,,1,'1'];
distinctInclude(arr);//[1, undefined, '1']
浙公网安备 33010602011771号