最近总结了一下数组去重的方法,当然有很多方法,这里列出了个人比较喜欢的三种方法供参考!!
// 第一种方法是利用对象的属性不叠加的性质,从而过滤掉数组中的重复元素。
var arr = [1,2,1,3,4,1,2,3,4,5,5,5,1,3,0,0,9,9,8,7,8,2,6];
Array.prototype.DuplicateRemoval = function(){
var arr = [], // 新数组
obj = {}, // 利用对象同一属性不叠加的原理,创建一个对象,进行数组过滤
len = this.length; // 当前调用的数组长度
for (var i = 0;i < len; i++){ // 遍历
if (!obj[this[i]]){ // 如果对象的值为undefined
obj[this[i]] = 'value'; // 给对象中的索引进行赋值
arr.push(this[i]); // 推入当前调用的数组索引
}
}
return arr; // 返回去重后的数组
};
arr.DuplicateRemoval(); // 输出去重后的新数组
// 第二种方法利用数组的indexOf方法。
function arrayDeweighting(array){
var arr = [],
len = array.length;
for (var i = 0;i < len;i++){
// 如果索引位置不一致
if (arr.indexOf(array[i]) == -1){
// 直接推入到新数组中
arr.push(array[i]);
}
}
return arr; // 返回去重后的数组
};
var arr2 = [1,1,2,2,0,0];
arrayDeweighting(arr2); // 输出去重后的数组
// 第三种方法是利用原数组进行循环,从而比较新数组和原数组的索引位。
function unique(array){
var arr = [];
for (var i = 0, len = array.length; i < len; i++){
for (var j = i + 1; j < len; j++){
if (array[i] === array[j]){
j = ++i;
}
}
arr.push(array[i])
}
return arr;
}
var uniques = [1, 2, 1, 2, 3, 3, 0, 0];
unique(uniques); // 返回去重后的数组
这里所有的方法都是乱序组成的,所以要想按从小到大进行排列的话,那么就必须调用数组的sort方法,
大家有没有更好的解决方案呢?欢迎进行评论!!!