一 利用 数组indexOf方法
维护一个暂存数组,将数据存进去
function unique(arr){
vartemp=[];
for(var i=0;i<arr.length;i++){
if(temp.indexOf(arr[i])===-1){
temp.push(arr[i]);
}
}
return temp;
}
二. 利用hash的方法
同样维护一个暂存数组,将数据存进去,同时利用一个hash数组判断是否重复
function uniqueHash(arr){
var temp=[],hash=[];
for(var i=0;i<arr.length;i++){
if(hash[arr[i]]!==1){
hash[arr[i]]=1;
temp.push(arr[i]);
}
}
return temp;
}
三. 利用sort排序的方法
先排序,然后创建一个新数组,如果每次都比较新的数组的最后一个元素和
当前排好序的数组中的元素,不相等就push,相等就忽略
function uniqueSort(arr){
arr.sort();
var result=[arr[0]];
for(var i=1;i<arr.length;i++){
if(arr[i]!==result[result.length-1]){
result.push(arr[i]);
}
}
return result;
}
四. ES6 SET方法
const unique = arr => Array.from(new Set(arr))
五.reduce方法
比较当前和prev数组,prev(其实是accumulator当然也可以不当做累加器使用),如果当前值在数组prev中没存在过就可以push。
function uniqueReduce(arr){
return arr.reduce((prev,next)=>{
if(prev.indexOf(next)===-1){
prev.push(next);
}
return prev;
},[])
}
对输入数据进行校验,如NAN的处理
// 判断是否重复 加上了对NaN undefined的处理, NaN的判断
function _fExist(aTmp, o) {
if (aTmp.length === 0) {
return false;
}
var tmp;
for (var i = 0, l = aTmp.length; i < l; i++) {
tmp = aTmp[i];
if (tmp === o) {
return true;
}
// NaN 需要特殊处理
if (!o && !tmp && tmp !== undefined && o !== undefined && isNaN(tmp) && isNaN(o)) {
return true;
}
}
return false;
}