]方法一:
双层循环,外层循环元素,内层循环时比较值
如果有相同的值则跳过,不相同则push进数组
Array.prototype.distinct = function(){
var arr = this,
result = [],
i,
j,
len = arr.length;
for(i = 0; i < len; i++){
for(j = i + 1; j < len; j++){
if(arr[i] === arr[j]){
j = ++i;
}
}
result.push(arr[i]);
}
return result;
}
var array = [1,2,3,4,4,1,1,2,1,1,1];
array.distinct(); //返回[3,4,2,1]
array.sort(function (x,y) {
return y-x;
});
方法二:利用对象的属性不能相同的特点进行去重
Array.prototype.distinct = function (){
var arr = this,
i,
obj = {},
result = [],
len = arr.length;
for(i = 0; i< arr.length; i++){
if(!obj[arr[i]]){ //如果能查找到,证明数组元素重复了
obj[arr[i]] = 1;
result.push(arr[i]);
}
}
return result;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
array.sort(function (x,y) {
return y-x;
});
方法三:利用新数组indexOf查找
<script>
var arr=[1,8,5,6,4,2,3,8,6,7,5,3];
var res=[];
for(var i=0;i<arr.length;i++){
if(res.indexOf(arr[i])==-1){
res.push(arr[i]);
res.sort();
}
}
console.log(res);
</script>
方法四:利用hash数组
<script>
var arr=[1,8,5,6,4,2,3,8,6,7,5,3];
var n={},r=[]; //n为hash表,r为临时数组
for(var i=0;i<arr.length;i++){
if(!n[arr[i]]){ //如果hash表中没有当前项
n[arr[i]]=true; /把当前项/存入hash表
r.push(arr[i]); //把当前项
r.sort();
r.severse();
}
}
console.log(r);
</script>
方法五es6:
[...new Set(arr)].sort()
另外:filter去重
var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7,8,8,0,8,6,3,4,56,2];
var arr2 = arr.filter((x, index,self)=>self.indexOf(x)===index)
console.log(arr2); //[1, 2, 3, 4, 5, 6, 7, 8, 0, 56]
JSON数组去重
/*
* JSON数组去重
* @param: [array] json Array
* @param: [string] 唯一的key名,根据此键名进行去重
*/
function uniqueArray(array, key){
var result = [array[0]];
for(var i = 1; i < array.length; i++){
var item = array[i];
var repeat = false;
for (var j = 0; j < result.length; j++) {
if (item[key] == result[j][key]) {
repeat = true;
break;
}
}
if (!repeat) {
result.push(item);
}
}
return result;
}