搜狐首页 科技 欢乐颂2

手机搜狐

SOHU.COM

也谈JavaScript数组去重

(点击上方公众号,可快速关注)

作者:TooBug(@TooBug)

www.toobug.net/article/array_unique_in_java.html

如有好文章投稿,请点击 → 这里了解详情

Java的数组去重是一个老生常谈的话题了。随便搜一搜就能找到非常多不同版本的解法。

昨天在微博上看到一篇文章,也写数组去重,主要推崇的方法是将利用数组元素当作对象key来去重。我在微博转发了“用对象key去重不是个好办法…”然后作者问什么才是推荐的方法。

细想一下,这样一个看似简单的需求,如果要做到完备,涉及的知识和需要注意的地方着实不少,于是诞生此文。

定义重复(相等)

要去重,首先得定义,什么叫作“重复”,即具体到代码而言,两个数据在什么情况下可以算是相等的。这并不是一个很容易的问题。

对于原始值而言,我们很容易想到1和1是相等的,'1'和'1'也是相等的。那么,1和'1'是相等的么?

如果这个问题还好说,只要回答“是”或者“不是”即可。那么下面这些情况就没那么容易了。

NaN

初看NaN时,很容易把它当成和null、undefined一样的独立数据类型。但其实,它是数字类型。

// number

console.log(typeofNaN);

根据规范,比较运算中只要有一个值为NaN,则比较结果为false,所以会有下面这些看起来略蛋疼的结论:

// 全都是false

0 NaN;

0 NaN;

0== NaN;

0=== NaN;

精选