刷题 | 数组去重的4种方法引发的思考

  牛客网有一道题

  要求去除输入数组的重复项,有bool undefined null NaN number object string 几乎所有数据类型

  但是去重的时候,不要求去除object "{}" 这个考点有两个 一个indexOf  和   NaN!==NaN

  这种去重,有三种解决方案

  使用indexOf

  原代码  

Array.prototype.check = function(){
        var res =[];
        var flag = true;
        for(var i=0;i<this.length;i++){
            if (res.indexOf(this[i])== -1) {
                if (this[i]!=this[i]) {
                    if (flag===true) {
                        res.push(this[i]);
                        flag=false;
                    }

                }else{
                    res.push(this[i]);
                }

            }
                return res;

}    

  测试代码

var arr = [false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a‘, ‘a‘, NaN];
    console.log(arr.check());    //[false, true, undefined, null, 0, 1, Object, Object, "a"]

   判断res数组的值是否首次出现的位置  没有首次出现则返回-1 过滤掉NaN

  使用ES6的Set去重
var set = new Set(this);
return Array.from(set);
  使用高阶函数filter去重
var r =this.filter(function(element,index,self){
             return self.indexOf(element)===index;
        })
        return r;

  但是这三种去重都无法去除重复的Object

  使用对象的key值去重
     var arr=[];
        var obj = {};
         for(var i=0;i<this.length;i++){
             if(!obj[this[i]]){
                 obj[this[i]]=1;
                arr.push(this[i])

             }
        }
         return arr; // [false, true, undefined, null, NaN, 0, 1, Object, "a"]

  这就去除了重复的对象

时间: 2024-07-31 15:33:54

刷题 | 数组去重的4种方法引发的思考的相关文章

js中数组去重的几种方法

js中数组去重的几种方法         1.遍历数组,一一比较,比较到相同的就删除后面的                 function unique(arr){                         for(var i=0;i<arr.length;i++){                                 for(var j=i+1;j<arr.length;j++){                                         if(ar

Javascript数组去重的几种方法

Javascript数组去重的几种方法 新建空数组,通过for...of(ES6)循环遍历,通过indexOf判断元素是否在新数组中存在,将不存在的(indexOf(n)==-1)元素push到新数组中: let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2]; function removeDup_indexOf(originalArr){ let newArr = []; for(n of originalArr){ if(newArr.in

数组去重的几种方法

JS数组去重的几种常见方法 JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ function uniq(array){ var temp = []; //一个新的临时数组 for(var i = 0; i < array.length; i++){ if(temp.indexOf(array[i]) == -1){ temp.push(arra

JavaScript数组去重的四种方法

今天,洗澡的想一个有趣的问题,使用js给数组去重,我想了四种方法,虽然今天的任务没有完成,5555: 不多说,po代码: //方法一:简单循环去重    Array.prototype.unique1 = function(){                var temp = [];        for(var i=0; i < this.length; i++){            if(temp.indexOf(this[i]) == -1){                tem

js数组去重的4种方法

js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.indexOf = Array.prototype.indexOf || function(item) { for (var i = 0, j = this.length; i < j; i++) { if (this[i] === item) { return i; } } return -1; } Ar

javascript数组去重的3种方法

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>数组去重</title> </head> <body> <script type="text/javascript"> //注意有一个元素是空的 var test1 = [0,0,1,1,2,'sss',2,,3,'abc',3,4,4,'s

js数组去重的两种方法

数组去重这种问题经常会遇到,解决方法也有很多,这里就总结两种比较常用的方法. 方法一 第一种方法的思路:遍历数组里的元素,由第一个元素开始依次按照顺序与其后面的元素相比较,如果不同则不用管,相同则把其后所被比较的元素去除.这样所有元素循环一遍,数组中重复的元素就能全部去除. 代码: <script> var arr = [1, 5, 7, 6, 3, 2, 5, 4, 6, 9, 5, 1, 2, 3, 5, 4, 8, 9, 5, 4, 5, 0];     for (var i = 0;

原生JS数组去重的几种方法

有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢?这能怎么办,自己手动实现嘛.(以下代码直接在原型上添加的的方法,为的就是和原生JS方法类似)可以达到Array.xxx()这样的效果 第一种方法:创建空数组利用indexOf方法检测就数组的项是否在新数组中. Array.prototype.unique=function(){ var arr=[];//创建新数组 for(var i=0;i<this.length;i++)

JS数组去重的三种方法

<!DOCTYPE html> <html>     <head>         <meta charset="UTF-8">         <title>数组去重</title>     </head>     <body>         <script type="text/javascript">             //注意有一个元素是空的