数组去重
/**
* 数组去重
*/
var arrT = [1,2,2,12,4,9,9,4,7,8,7,8,0,0];
function unique_1(_arr){
var arr =[],flag;
for(var i = 0;i < _arr.length; i++){
flag = true;
for(var j = 0;j < arr.length; j++){
if(arr[j] === _arr[i]){
flag = false;
break;
}
}
if(flag){
arr.push(_arr[i]);
}
}
return arr.sort();
}
function unique_2(_arr){
var arr =[],flag;
for(var i = 0;i < _arr.length; i++){
flag = true;
for(var j = i+1;j < _arr.length; j++){
if(_arr[j] === _arr[i]){
flag = false;
break;
}
}
if(flag){
arr.push(_arr[i]);
}
}
return arr.sort();
}
/**
* filter 返回新数据 ,return true ;加入否则丢弃
* indexOf 找出数组某一项,返回index否则为-1;
* 当_arr.indexOf(item) === index 则代表此项第一次出现;如果不相等 则代表此item已经出现过了 丢弃
* @param {*} _arr
*/
function unique_3(_arr){
return _arr.filter(function(item,index){
return _arr.indexOf(item) === index;
})
}
function unique_4(_arr){
var arr = [];
_arr.forEach(function(item,index,self){
if(arr.indexOf(item) === -1){
arr.push(item);
}
});
return arr;
}
/**
* es6 includes 判断数组有值,返回Boolean
*
* var c = [NaN];时,indexOf 返回总是-1 ;
* 而 includes 可以判断;
*
* var a =new Array(4) 当值为空时;;
*
* includes 认为 a.includes(undefined)= true
* a.indexOf(undefined) 为 -1 不能判断
* @param {*} _arr
*/
function unique_5(_arr){
var arr = [];
_arr.forEach(function(item,index,self){
if(!arr.includes(item)){
arr.push(item);
}
});
return arr;
}
/**
* array.reduce(function(total, currentValue, currentIndex, arr), initialValue);
* function(total,currentValue, index,arr) 必需。用于执行每个数组元素的函数。
函数参数:
参数 描述
total 必需。初始值, 或者计算结束后的返回值。
currentValue 必需。当前元素
currentIndex 可选。当前元素的索引
arr 可选。当前元素所属的数组对象。
initialValue 可选。传递给函数的初始值
* @param {*} _arr
*/
function unique_6(_arr){
return _arr.reduce(function(prev,item,index,self){
if(!prev.includes(item)){
prev.push(item)
}else{
}
return prev;
},[])
}
/**
* Map
* @param {*} _arr
*/
function unique_7(_arr){
var map = new Map(),
arr = [];
_arr.forEach(function(item,index,self){
if(!map.get(item)){
map.set(item,1);
arr.push(item);
}
})
return arr;
}
/**
* Set
* @param {*} _arr
*/
function unique_8(_arr){
return Array.from(new Set(_arr));
}