博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20170614-数组去重
阅读量:6642 次
发布时间:2019-06-25

本文共 1777 字,大约阅读时间需要 5 分钟。

测试用例

var arr = [1,1,'1','1',0,0,'0','0',undefined,undefined,null,null,NaN,NaN,{},{},[],[],/a/,/a/]

indexOf

function unique(arr){    var temp = []    for(var i=0;i
[ 1, '1', 0, '0', undefined, null, {}, {}, [], [], /a/, /a/ ]
  • NaN丢失


function unique(arr){    var temp = []    arr.forEach(function(item){        if(temp.indexOf(item) === -1){            temp.push(item)        }    })    return temp}console.log(unique(arr))> [ 1, '1', 0, '0', undefined, null, NaN, NaN, {}, {}, [], [], /a/, /a/ ]
  • NaN重复


  • indexOf认为NaN与NaN是不重复的

includes

function unique(arr){    var temp = []    for(var i=0;i
[1, "1", 0, "0", undefined, null, NaN, {}, {}, [], [], /a/, /a/]
  • includes认为NaN和NaN是重复的

===

function unique(arr){    var temp = []    var isRepeat = false    for(var i=0;i
[1, "1", 0, "0", undefined, null, NaN, NaN, {}, {}, [], [], /a/,/a/]
  • NaN重复

使用对象实现数组去重及改进

function unique(arr){    var obj = {}    var temp = []    for(var i=0;i
[ 1, 0, undefined, null, NaN, {}, [], /a/ ]
  • 无法区分隐式类型转换成字符串后一样的值,比如1和'1'

  • 无法处理复杂数据类型,比如对象(因为对象作为key会变成[object Object])

改进1

function unique(arr){    var obj = {}    var temp = []    var key    for(var i=0;i
[ 1, '1', 0, '0', undefined, null, NaN, {}, [], /a/ ]

改进2

function unique(arr){    var obj = {}    var temp = []    var key    for(var i=0;i
[ 1, '1', 0, '0', undefined, null, NaN, {}, [] ]

map

function unique(arr){    var temp = []    var map = new Map()    for(var i=0; i
[ 1, '1', 0, '0', undefined, null, NaN, {}, {}, [], [], /a/, /a/ ]

set

function unique(arr){    var set = new Set(arr)    return Array.from(set)}console.log(unique(arr))> [ 1, '1', 0, '0', undefined, null, NaN, {}, {}, [], [], /a/, /a/ ]

各种方法比较

clipboard.png

总结

数组去重需要根据场景选择合适的去重方法,没有固定的答案。

参考资料

转载地址:http://coovo.baihongyu.com/

你可能感兴趣的文章
版本控制笔记
查看>>
搜索引擎(Solr-索引详解)
查看>>
Redis 总结
查看>>
以太坊JSON RPC API中文文档
查看>>
使用xshell连接Linux 和 PuTTY密钥认证 、xshell密钥认证 (资源)
查看>>
PUTTY链接linux、XShell链接linux、PUTTY密钥认证、XShell密钥认证
查看>>
Numpy入门
查看>>
Tomcat_JDK部署
查看>>
5分钟了解lucene
查看>>
unCAPTCHA升级!轻松破解语音准确率达90%
查看>>
获取token,如何进行登录鉴权测试其他接口
查看>>
Java B2B2C多用户商城 springcloud架构-云架构代码结构构建(五)
查看>>
对,每个人有每个人的风格,每个人都是独一无二的,要活出自己的风采
查看>>
android使用shape stroke描边只保留底部
查看>>
Linux下存储多路径软件MultiPath配置指南
查看>>
ABBYY PDF Transformer+的安装方法
查看>>
Python之禅
查看>>
重逢Windows从powerShell开始
查看>>
JAVA 的异常那些事
查看>>
磁饱和
查看>>