猿记录

一个记录、分享的博客

您的位置:主页 > 技术专栏 > javascript >

用JavaScript为数组去重重复项

2017-10-31 15:40:50 作者:yxl 次阅读 javascript

Array.prototype.uniq = function () {
    // 长度只有1,直接返回当前的拷贝
    if (this.length <= 1) {
        return this.slice(0);
    }
    var aResult = [];
    for (var i = 0, l = this.length; i < l; i++) {
        if (!_fExist(aResult, this[i])) {
            aResult.push(this[i]);
        }
    }
    return aResult;
    // 判断是否重复
    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;
    }
}
//2017/3/14更新  添加两种数组去重的方法
 
var arr = [1,2,4,4,3,3,1,5,3];
//方法一
function getChong1(arr){
   arr.sort();
   var tem = [];
  var ss = [];
if(Object.prototype.toString.call(arr) == '[object Array]'){
   var len = arr.length;
for(var i = 0; i < len; i++){
   if(tem.indexOf(arr[i]) == -1){
     tem.push(arr[i]); 
   }
}
return tem;
}
 
}
var newarr = getChong1(arr);
console.log( newarr );
//方法二
function getChong2(arr){
   arr.sort();
   var re=[arr[0]];
for(var i = 1; i < arr.length; i++)
 {
    if( arr[i] !== re[re.length-1])
 {
  re.push(arr[i]);
 }
}
 return re;
}
console.log(getChong2(arr));
 
//方法三(最原始的,但是兼容性好)
var array = [1, 1, '1', '1'];
function unique(array) {
    // res用来存储结果
    var res = [];
    for (var i = 0, arrayLen = array.length; i < arrayLen; i++) {
        for (var j = 0, resLen = res.length; j < resLen; j++ ) {
            if (array[i] === res[j]) {
                break;
            }
        }
        // 如果array[i]是唯一的,那么执行完循环,j等于resLen
        if (j === resLen) {
            res.push(array[i])
        }
    }
    return res;
}
 
console.log(unique(array)); // [1, "1"]
 
//方法四
var array = [1, 2, 1, 1, '1'];
 
function unique(array) {
    var res = array.filter(function(item, index, array){
        return array.indexOf(item) === index;
    })
    return res;
}
 
console.log(unique(array));
 
//方法五  (es6)
var array = [1, 2, 1, 1, '1'];
 
function unique(array) {
   return Array.from(new Set(array));
}
 
console.log(unique(array)); // [1, 2, "1"]
甚至可以再简化下:
 
function unique(array) {
    return [...new Set(array)];
}
还可以再简化下:
var unique = (a) => [...new Set(a)]
 
此外,如果用 Map 的话:
 
function unique (arr) {
    const seen = new Map()
    return arr.filter((a) => !seen.has(a) && seen.set(a, 1))
}
 

凡本站注明“本站”或“投稿”的所有文章,版权均属于本站或投稿人,未经本站授权不得转载、摘编或利用其它方式使用上述作品。

编辑:yxl 关键词: javascript
0

网友评论