首页 > 试题广场 >

用JavaScript脚本为Array对象添加一个去除重复项

[问答题]

用JavaScript脚本为Array对象添加一个去除重复项的方法。

推荐
感觉这道题主要有两个地方需要注意:1、返回值是否是当前引用 2、“重复”的判断条件
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;
    }
}

测试用例:
[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN].uniq()
结果:
[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']

编辑于 2015-02-04 19:44:49 回复(0)
[1,1,2,2,3,3,3,3].filter(function(elem, index, self) {
    return index == self.indexOf(elem);
})

发表于 2017-10-26 15:31:36 回复(1)
编辑于 2020-09-10 00:17:57 回复(0)
Array.prototype.strip = function () {
                var arrMap = new Map();
                var newarr = [];
                this.forEach(function (ele,idx) {
                    arrMap.set(ele,idx)
                })
                arrMap.forEach(function (value,key) {
                    newarr.push(key)
                })
                return newarr;
            }

发表于 2016-07-04 14:45:07 回复(0)
Array.prototype.distict=function(){
	var result=[],flag=false;
	for(var i=0;i<this.length;i++){
		if(this[i]!=this[i]){
			if(flag){
				continue;
			}else{
				flag=true;
				result.push(this[i]);
			}
		}else if(result.indexOf(this[i])==-1){
			result.push(this[i]);
		}
	}
	return result;
};
var arr=[2,null,3,4,NaN,2,3,6,8,4,NaN,undefined,undefined,null,6];
//[2, null, 3, 4, NaN, 6, 8, undefined]

编辑于 2017-06-05 14:24:16 回复(0)
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());

发表于 2017-02-28 16:44:34 回复(0)
var arry =[1,25,15,1,2,15,5,15,25,35,1]
var set =new Set(arry)
console.log([...set])
发表于 2017-08-14 20:39:29 回复(3)
Array.prototype.rmRepeat = function(){  
    var res = [],hash={};
    var len=this.length;
    for (var i=0;i<len ;i++) {
        if( !hash.hasOwnProperty('_'+this[i]) )
        {
            hash['_'+this[i]] = 1;
            res.push(this[i]);
        }
    }
    return res;
} 
编辑于 2015-01-14 17:45:11 回复(0)
Array.prototype.removeDuplicates = function() { return [...new Set(this)]; };
发表于 2023-09-09 20:15:24 回复(0)
使用splice()方法实现数组去重&lt;script&gt;var arr = [1,2,2,2,4,2];for(var i = 0; i &lt;= arr.length; i++){ for(var j = i + 1; j &lt; arr.lenght; j++) { if(arr[i] == arr[j]) {arr.splice(j,1); //删除j位置处的元素 j- -; } }}&lt;/script&gt;alert(arr); //返回1,2,4三个元素
发表于 2023-03-31 10:30:41 回复(0)
arr.filter((ele,index,arr)=> {return index == arr.indexOf(ele);})
发表于 2018-05-21 11:32:14 回复(0)
function unique(arr){ return arr.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",").map(function(data){return +data;}); }
发表于 2017-10-17 15:55:55 回复(0)
function unique1(array){
  var n = []; //一个新的临时数组
  for(var i = 0; i < array.length; i++){
      if (n.indexOf(array[i]) == -1){
            n.push(array[i]);
      }
  }
  return n;
}
unique1(['a',2,2,'a',true,false,true,undefined,undefined])
输出: ["a", 2, true, false, undefined]
发表于 2017-09-24 19:50:39 回复(0)
Array.prototype.delRep=function(){
    return [...new Set(this)];
}

发表于 2017-08-05 10:57:21 回复(0)
Array.prototype.removeDuplicate = function(){
  return this.filter(function(element,index,self){
    return self.indexOf(element) == index;
  })
}

发表于 2017-05-11 15:11:27 回复(0)
ES6最暴力去重
[...new Set(arr)]
编辑于 2017-05-07 11:29:12 回复(0)
var arr = [1,2,2,5,5,8,9];
var arrlis = [];
function oBtn(arr){
    for(var i =0; i<arr.length; i++){
        if(arrlis.indexOf(arr[i]) == -1){
             arrlis.push(arr[i]);
        }
    }
    return arrlis;
}
发表于 2017-02-10 14:26:46 回复(0)
Array.prototype.removeDulplicates = function () {
    for (var i = 0; i < this.length;) {
        removeDulplicatesFromArray(this, this[i], ++i);
    }
    function removeDulplicatesFromArray(arr, item, start) {
        var index = arr.indexOf(item, start);
        if (index != -1) {
            arr.splice(index, 1);
            removeDulplicatesFromArray(arr, item, index);
        }
    }  
};

编辑于 2016-08-17 20:47:06 回复(0)
ary = [1, 1, 3, 3, 5, 5, 2, 2, 7, 7, 1, 3, 2, 7, 22, 7]
Array.prototype.dieRtt = function() {
var obj = {}
for (var i = 0; i < this.length; i++) {
var item = this[i]
if (obj[item] === item) {
this[i] = this[this.length - 1]
this.length--
i--;
continue;
}
obj[item] = item
}
obj = null;
return this
}
ary.dieRtt().sort(function(a, b) {
return a - b
})

相比之下性能较好。
发表于 2015-12-16 23:27:43 回复(0)
function arrayNoDupulate(array) {
var hash = {}; 
var result = [];
for(var i=0;i<array.length;i++) {
    if (!hash[array[i]]) {
     result.push(array[i]);
     hash[array[i]] = true;
    }
}
return result;
}

发表于 2015-09-13 22:21:43 回复(0)
 for(var i=0;i<ary.length;i++){
    var cur=ary[i];
    if(obj[cur]==cur){
    ary.splice(i,1);
    i--;
    continue;
    }
    obj[cur]=cur;
  }
      obj=null;
      console.log(ary);
发表于 2015-08-28 16:45:39 回复(0)