转载:http://www.cnblogs.com/leonwang/p/4845576.html
面试遇到数组去重,于是来归纳归纳。
方法:
第一种:遍历原数组,另外建立新数组,用indexof判断是否存在新数组,不存在就push到新数组中,然后返回新数组。
function removeRepeat(arr) {
var arr1 = [];
for(var i=0,j=arr.length;i<j;i++) {
if(arr1.indexOf(arr[i]) === -1) {
arr1.push(arr[i]);
}
}
}
第二种:遍历原数组,创建一个新数组存放结果,利用object对象保存数组值,判断数组值是否保存在object中,未保存则push到新数组并用object[arrayitem] = 1的方式记录保存
Array.prototype.unique3 = function(){
var res = [];
var json = {};
for(var i = 0; i < this.length; i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]] = 1;
}
}
return res;
}
var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
alert(arr.unique3());
第三种:
数组下标判断法, 遍历数组,利用indexOf判断元素的值是否与当前索引相等,如相等则加入
function removeRepeat(ar) {
var ret = [];
ar.forEach(function(e, i, ar) {
if (ar.indexOf(e) === i) {
ret.push(e);
}
});
return ret;
}
第四种: 数组先排序, 然后比较俩数组一头一尾进行去重
function removeRepeat(ar) {
var ret = [],
end;
ar.sort();
end = ar[0];
ret.push(ar[0]);
for (var i = 1; i < ar.length; i++) {
if (ar[i] != end) {
ret.push(ar[i]);
end = ar[i];
}
}
return ret;
}