测试用例
在写代码之前写一组测试(使用 Jest
),这有利于我们每次修改后完善代码,我们先写一个对基本类型进行去重的版本(忽略 NaN
)
1 | const { unique } = require('./unique.1.js') |
接着开始实现
1 | function unique (list){ |
保存后运行测试用例,必然没通过,因为啥也没有嘛
Set 方式
上面使用 new Set
已经是一种去重方式了, 保存后运行
1 | function unique (list){ |
这样肯定过的,没啥疑问
最土的办法 双重 for
1 | /** |
也可以写成这样
1 | /** |
甚至你可以用万能的 reduce
1 | /** |
当然你也可以不用 some
换成 indexOf
1 | /** |
优化时间复杂度的版本
1 | /** |
也可以这么写
1 | /** |
可以通过 filter
1 | /** |
还是可以用万能的 reduce
1 | /** |
排序后比对元素
注意这个会把数组重新排序,输出顺序不稳定
1 | /** |
利用 filter
1 | /** |
总结
正常的情况到这里就已经差不多一共就 Set
, for循环
,cache
和排序后比对前后元素四种方法。
是这个世界存在一个神奇的东西 NaN
,
它并不等于自身,所以上面存在比较相等逻辑的方法被 NaN
爆杀,只剩Set
和 键值对才能对付 NaN
了
1 | /** |
谨慎使用 NaN
(最好不要让它出现)
如果追求对象也去重
可以键值对的键值基础上 JSON.stringify(value)
1 | /** |