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
}
1
zhao7399686 2019 年 7 月 18 日
?
|
2
NewDraw 2019 年 7 月 18 日 via Android
这代码是在养蛊啊!
|
3
AlloVince 2019 年 7 月 18 日 ``` js
Array.from(new Set(inputArray)); ``` |
4
wenjay OP 发出去的文章不能修改的吗?
|
7
Yumwey 2019 年 7 月 18 日
用 filter 一行就写完了
|
8
starsriver 2019 年 7 月 18 日 via Android
es6 new 的 array 自动去重。
|
9
wenjay OP |
10
lihongjie0209 2019 年 7 月 18 日
数据结构没学好?
|
11
xingyue 2019 年 7 月 18 日
我这是要完犊子了吗,看了半天没觉得有什么问题.....除了代码啰嗦了点。再看看 #1 #2 #10,现在内心慌的一.....
|
12
taogen 2019 年 7 月 18 日 via Android
就说算法的时间复杂度为 O(n^2),空间复杂度为 O(n)。高级否?
|
13
taogen 2019 年 7 月 18 日 via Android
另外,用 hash table 作为中间容器,时间复杂度可以为 O(n)
|
14
oIMOo 2019 年 7 月 18 日
转成 set 再转回 list 怎么样?
|
15
lynnic 2019 年 7 月 18 日 via Android
时间复杂度为啥是 n 方?
|
16
necomancer 2019 年 7 月 18 日
@lynnic indexof 是 o(n) 的吧
|
17
Chemist 2019 年 7 月 18 日 via iPhone
@necomancer 外面还有一层 n🤣
|
18
serenader 2019 年 7 月 19 日 LZ 的这个方法有个 bug,无法去重 NaN 以及 {} 。
几年前我写过一篇文章,也是讲去重的:blog.serenader.me/javascript-shu-zu-qu-zhong/ 不过刚刚看了一下,我文章里面最后给出的方案也有 bug。。纯粹当抛砖引玉了,看看大家能找到几个 bug 🤣🤣 |
19
indomi 2019 年 7 月 19 日
[...new Set(arr)]
|
20
bumz 2019 年 7 月 19 日 via iPhone
ES6 之前就手写一哈希表,高级吗,手动狗头
|
21
15651980765 2019 年 7 月 19 日
@Yumwey 请问用 filter 是这样吗?
Array.prototype.unique = function() { return this.filter(function(item, index, array) {return array.indexOf(item) === index}); } 我测了一下这种方法在数组很长( 4000w+)的情况下,耗时差不多是楼主方法的两倍。 Array.from(new Set(array))这种比楼主的方法稍微快一点 |
22
stillsilly 2019 年 7 月 19 日
let a = [1,1,2,2,2,3,3]
let b = [...new Set(a)] console.log(b) |
23
imbacc 2019 年 7 月 19 日
后排吃瓜
|
24
karllynn 2019 年 7 月 19 日
用 hash 的话,数组的顺序会变的…楼主这个时间复杂度太高了
|
25
QiaTia 2019 年 7 月 19 日
```
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) } ``` |
27
dartabe 2019 年 7 月 19 日
之前在写 leetcode 的时候用的 set 做的中间容器. 时间复杂度 O(n)
后来发现 set 自动就可以去重了 |
28
dartabe 2019 年 7 月 19 日
不过 javascript 对象直接就是哈希表了? 用 set 的话我只是懒得存 1/0 或者 true /false
求大佬看我理解对不对 |
29
weixiangzhe 2019 年 7 月 19 日 via iPhone
这种东西 直接看 lodash 源码最靠谱了
|
30
reus 2019 年 7 月 19 日
把 indexOf 改成对 Set 的操作,用 Set 辅助去重
如果没有 Set,那就自己实现一个 |
31
CodingNaux 2019 年 7 月 19 日 via iPhone
unique ( collection,func)
|
32
RoshanWu 2019 年 7 月 19 日
|
33
RoshanWu 2019 年 7 月 19 日
|
35
Arizas 2019 年 7 月 19 日
uniqueResult = [...new Set(arr)]
|
36
Aoerz 2019 年 7 月 19 日 via Android
首先排序,然后遍历,时间复杂度 O(n),空间复杂度 O(1)
|
37
Snail233 2019 年 7 月 19 日
es6 不是有 set 么、
|
38
lihongjie0209 2019 年 7 月 19 日 @Aoerz
排序的 nlogn 的时间复杂度不算了? |
39
Fairy1128 2019 年 7 月 19 日
难道不是先问 数组的 item 是普通类型还是引用类型吗
|
41
Laumm 2019 年 7 月 19 日
感觉最简单就是放 Set 里了
|
42
arnoldxiao 2019 年 7 月 19 日
用 Set 含一下再放回去
|
43
fengdechoulian 2019 年 7 月 19 日
@arnoldxiao 仰望高端玩家
|
44
doing1 2019 年 7 月 19 日
我服了
|
46
DRcoding 2019 年 7 月 19 日
所谓的 filter
var r = ['aa','bb','cc','bb'].filter(function (ele, index, self) { return self.indexOf(ele) === index; }); console.log(r.toString()); |
47
ChiangDi 2019 年 7 月 19 日 via iPhone
不能先排序吧,数组里可能有数字可能有字符串或者其它任何东西
|
48
YouMoeYi 2019 年 7 月 19 日
为啥不用 Set
function arr_dr (arr){ let st = new Set(arr); return [...st]; } |
49
mystorp 2019 年 7 月 23 日
Array.prototype.unique1 = function () {
let m = new Map; for (var i = 0; i < this.length; i++) //遍历当前数组 { // 不同于 {}, Map 是有序的哈希表 // Map 的 key 可以是任意 js 值 m.set(this[i], true); } return m.keys(); } let arr = [1, 1, 2, 2, NaN, NaN, null, null, undefined, undefined, {}, [], Symbol.split, '', '', false, false]; console.log(arr.unique1()); // MapIterator { 1, 2, NaN, null, undefined, {}, [], Symbol(Symbol.split), '', false } arr.push(arr.shift(), arr.shift()); console.log(arr.unique1()); // MapIterator { 2, NaN, null, undefined, {}, [], Symbol(Symbol.split), '', false, 1 } |