首页 > 试题广场 >

数组去重

[编程题]数组去重
  • 热度指数:79453 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
为 Array 对象添加一个去除重复项的方法
示例1

输入

[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]

输出

[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']
运用es6的Set集合
Array.prototype.uniq = function () {
    let newArr = [...new Set(this)];//获得合并后的数组
    return newArr;
}



发表于 2021-06-29 10:02:06 回复(0)
利用 Set 集合 和展开运算符
Array.prototype.uniq = function () {
    return [...new Set(this)]
}


发表于 2021-06-16 14:03:16 回复(0)
Array.prototype.uniq = function () {
  return [...new Set(this)];  
}

发表于 2021-05-06 11:47:19 回复(0)
Array.prototype.uniq = function () {
    var newArr = []
    var flag = true
    for (var i = 0; i < this.length; i++) {
        if (this[i] == this[i]) {
            //当前值不为NaN
            if (newArr.indexOf(this[i]) == -1) {
                newArr.push(this[i])
            }
        }
        else {
            //当前值为NaN
            if (flag) {
                newArr.push(this[i])
                flag = false
            }
        }
    }
    return newArr
} 
自己的代码综合了前排的思路修改后的
编辑于 2021-04-14 11:02:43 回复(0)
哈哈,本来之前想写一个获取去重元素的方法,写着写着变成了去重了,直接拿来就用了。
Array.prototype.uniq = function () {
    const arr = this
    const result = []
    const loop = (index) => {
        if (index >= arr.length) {
            return
        }
        if (!result.includes(arr[index])) {
            result.push(arr[index])
        }
        index ++
        loop(index)
    }
    loop(0)
    return result
}



发表于 2021-04-08 23:47:34 回复(0)
Array.prototype.uniq = function () {
     let arr = [];
    for(let i=0;i<this.length;i++){
        if(!arr.includes(this[i])){
            arr.push(this[i])
        }
    }
    return arr
}
发表于 2021-03-22 11:11:31 回复(0)
运用了es6,array.form(new Set(this))
或者[...new set(this)]

发表于 2021-03-17 19:40:54 回复(0)
Array.prototype.uniq = function () {
    return [...new Set(this)]
}
用ES6解确实简单

发表于 2021-03-10 18:56:46 回复(0)
不明白为什么数组去重的难度是困难呀,在力扣里面明明是简单类型的题目
        Array.prototype.uniq = function () { //es5解法的话可以不用箭头函数
            let arr = [], flag = true;
            this.forEach(item => {
                if (item != item && flag) {
                    arr[arr.length] = item;
                    flag = false;
                } else if (arr.indexOf(item) == -1 && item == item) {
                    arr[arr.length] = item
                }
            })
            return arr;
        };

       Array.prototype.uniq = function () { //es6解法
          return [...new Set(this)]
         }


发表于 2021-01-08 18:14:32 回复(1)
Array.prototype.uniq = function () {
    return Array.from(new Set(this))
}
ES6 精简
发表于 2020-11-15 23:53:21 回复(0)
Array.prototype.uniq = function () {
    var set = new Set();
    this.forEach(v => {set.add(v)});
    return Array.from(set);
}

编辑于 2020-08-12 09:04:04 回复(0)
Array.prototype.uniq = function () {
    return Object.values(this.reduce((r, c) => {
      return {
        ...r,
        [c]: c
      }
    }, {}))
}
为啥没通过 是我题意理解不对吗
发表于 2020-06-30 13:33:15 回复(0)
/***
 * 
 * ES6  使用集合直接进行去重操作
    function unique(arr){
      return [...new Set(arr)];
  }
 */
Array.prototype.uniq = function () {
    //1. 定义一个数组  和  标志位
    let finalArr = [];
    let flag = true;
    // for循环操作
    for (let i = 0; i < this.length; i++) {
        // 使用indexOf方法  如果要检索的字符串值没有出现,则该方法返回 -1
        if (finalArr.indexOf(this[i]) == -1) {
            if (this[i] != this[i]) { //排除 NaN
                if (flag) {
                    // 加入去重数组中
                    finalArr.push(this[i]);
                    // 改变标志位
                    flag = false;
                }
            } else {
                //直接进行 push操作
                finalArr.push(this[i]);
            }
        }
    }
    return finalArr;
}

发表于 2020-03-08 11:59:39 回复(0)
Array.prototype.uniq = function () {
    return this.reduce((prev, next) => {
        prev.findIndex(item => Object.is(item, next)) === -1 && prev.push(next);
        return prev;
    }, [])
}
通过Object.is判断即可
发表于 2019-09-30 11:36:38 回复(0)
Array.prototype.uniq = function () {
    //思想,将所有重复项设为空字符"",再次迭代数组去掉空字符项
    var arrCopy=this.slice()
    for(var i=0;i<this.length-1;i++){
        for(var j=i+1;j<this.length;j++){
            if(this[i]===this[j]||(''+this[i]==='NaN'&&''+this[j]==='NaN')){
                arrCopy[j]=''
            }
        }
    }
               
    var trimArr=function(_arr){
    _arr.forEach(function(item,index){
        if (item==='') {
            _arr.splice(index,1)
            trimArr(_arr)
        }
    })
    }
            
        trimArr(arrCopy)
        return arrCopy    
}
发表于 2019-03-20 09:33:50 回复(0)
Array.prototype.uniq = function () {
    var hasNaN = false;
    for (var i = 0; i < this.length; i++) {
        if ((hasNaN === false) && (this[i] != this[i])) {
            hasNaN = true;
            continue;
        }
        if (this.indexOf(this[i]) < i) this.splice(i--,1);
    }
    return this;
}

发表于 2018-09-20 15:50:51 回复(0)
// 为什么这样写不通过
Array.prototype.uniq = function() {
    return this.filter(function(ele,index,arr){
        return index === arr.indexOf(ele);
    });
};
发表于 2018-07-24 11:03:56 回复(1)
//借用辅助数组来实现,遍历原数组,辅助数组中没有该元素就添加到辅助数组中去,最后返回这个辅助数组 Array.prototype.uniq = function () { var temp = [];  var flag=false;//为了给NaN做标记,避免重复添加NaN到辅助数组中去   for(var i=0;i<this.length;i++){ if(temp.indexOf(this[i]) === -1){//三种情况:非NaN情况,说明辅助数组中没有该元素;  //NaN情况,由于NaN不等于自身,需要单独判断;有对象的情况,对象不等于自身  if(this[i] !== this[i]){ //itemNaN或者对象的情况  if(typeof this[i] === 'object'){//item是对象的情况  temp.push(this[i]);  }else{//itemNaN  if(!flag){//判断NaN之前有没有加入辅助数组中  temp.push(this[i]);  flag = true;  }
                }
            }else{ //item是非NaN  temp.push(this[i]);  }
        }
    } return temp; }
发表于 2018-07-15 22:10:17 回复(0)
Array.prototype.uniq = function () {
    var k = 0;
    for(var i = 0; i < Array.length; i++)
    {
        for(var j = 1; j < Array.length; j++)
        {
            if(Array[k] === Array[j])
                Array.remove(j);
                Array.length = Array.length - 1;
        }
        k = k + 1;
    }
    return Array;
}
这么做明显符合了题目的要求,但是测试用例通过的只有0%,就是不知道哪里错了,求大佬解析

发表于 2018-04-10 16:33:24 回复(0)
return Array.from(new Set(this))

发表于 2018-03-21 20:13:43 回复(0)

问题信息

难度:
27条回答 21698浏览

热门推荐

通过挑战的用户

查看代码
数组去重