博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
刷题 | 数组去重的4种方法引发的思考
阅读量:5256 次
发布时间:2019-06-14

本文共 1313 字,大约阅读时间需要 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

  测试代码

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

  这就去除了重复的对象

  // 8.31补充

使用对象去除两个数组的重复项
var arr = ["sina", "qq", "taobao", "jd", "baidu"]var obj = {}    for (var i = 0; i < arr.length; i++) {        var key = arr[i]        obj[key] = 0    }var arr2 = ["qq", "baidu", "baidu"];    for (var i = 0; i < arr2.length; i++) {        var key = arr2[i];        obj[key]++    }var res = []    for (var i in obj) {        if (obj[i] == 0) {            res.push(i)        }    }console.log(res.sort())  // ["sina", "taobao", "jd"]

转载于:https://www.cnblogs.com/dirkhe/p/7399734.html

你可能感兴趣的文章
python习题:unittest参数化-数据从文件或excel中读取
查看>>
在工程中要加入新的错误弹出方法
查看>>
PS 滤镜— — sparkle 效果
查看>>
网站产品设计
查看>>
代理ARP
查看>>
go 学习笔记(4) ---项目结构
查看>>
java中静态代码块的用法 static用法详解
查看>>
Java线程面试题
查看>>
Paper Reading: Relation Networks for Object Detection
查看>>
day22 01 初识面向对象----简单的人狗大战小游戏
查看>>
mybatis源代码分析:深入了解mybatis延迟加载机制
查看>>
Flask三剑客
查看>>
Hibernate-缓存
查看>>
【BZOJ4516】生成魔咒(后缀自动机)
查看>>
提高PHP性能的10条建议
查看>>
svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法...
查看>>
熟用TableView
查看>>
Java大数——a^b + b^a
查看>>
poj 3164 最小树形图(朱刘算法)
查看>>
服务器内存泄露 , 重启后恢复问题解决方案
查看>>