数组去重

2019-07-18 20:19:56 +08:00
 wenjay

数组去重

 Array.prototype.unique1 = function () {
   var n = []; //一个新的临时数组
   for (var i = 0; i < this.length; i++) //遍历当前数组
   {
     if (n.indexOf(this[i]) == -1) n.push(this[i]);
   }
   return n
}
6423 次点击
所在节点    JavaScript
49 条回复
15651980765
2019-07-19 10:04:19 +08:00
@Yumwey 请问用 filter 是这样吗?
Array.prototype.unique = function() {
return this.filter(function(item, index, array) {return array.indexOf(item) === index});
}
我测了一下这种方法在数组很长( 4000w+)的情况下,耗时差不多是楼主方法的两倍。
Array.from(new Set(array))这种比楼主的方法稍微快一点
stillsilly
2019-07-19 10:11:15 +08:00
let a = [1,1,2,2,2,3,3]
let b = [...new Set(a)]
console.log(b)
imbacc
2019-07-19 10:13:57 +08:00
后排吃瓜
karllynn
2019-07-19 10:48:11 +08:00
用 hash 的话,数组的顺序会变的…楼主这个时间复杂度太高了
QiaTia
2019-07-19 11:18:13 +08:00
```
Array.prototype.unique1 = function () {
var n = {}; //一个新的临时数组
for (var i = 0; i < this.length; i++) //遍历当前数组
{
if (n.[this[i]] !== 'a') n[this[i]]='a'
}
return Object.keys(n)
}
```
QiaTia
2019-07-19 11:18:45 +08:00
@QiaTia 多打了一个点 if (n[this[i]] !== 'a')
dartabe
2019-07-19 11:45:12 +08:00
之前在写 leetcode 的时候用的 set 做的中间容器. 时间复杂度 O(n)

后来发现 set 自动就可以去重了
dartabe
2019-07-19 12:07:08 +08:00
不过 javascript 对象直接就是哈希表了? 用 set 的话我只是懒得存 1/0 或者 true /false

求大佬看我理解对不对
weixiangzhe
2019-07-19 12:16:26 +08:00
这种东西 直接看 lodash 源码最靠谱了
reus
2019-07-19 12:21:23 +08:00
把 indexOf 改成对 Set 的操作,用 Set 辅助去重
如果没有 Set,那就自己实现一个
CodingNaux
2019-07-19 12:22:40 +08:00
unique ( collection,func)
RoshanWu
2019-07-19 12:24:32 +08:00
RoshanWu
2019-07-19 12:25:29 +08:00
wozhizui
2019-07-19 12:27:56 +08:00
@oIMOo 俺也一样
Arizas
2019-07-19 12:34:18 +08:00
uniqueResult = [...new Set(arr)]
Aoerz
2019-07-19 13:32:55 +08:00
首先排序,然后遍历,时间复杂度 O(n),空间复杂度 O(1)
Snail233
2019-07-19 13:39:56 +08:00
es6 不是有 set 么、
lihongjie0209
2019-07-19 13:44:05 +08:00
@Aoerz
排序的 nlogn 的时间复杂度不算了?
Fairy1128
2019-07-19 14:56:46 +08:00
难道不是先问 数组的 item 是普通类型还是引用类型吗
Laumm
2019-07-19 16:04:13 +08:00
@Aoerz 既然都需要排序了,时间复杂度就应该大于 O(n)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/584224

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX