小虾虎鱼

小虾虎鱼

Javascript数组去重

作者 禾惠 发表于 2014/08/07,最后修改于 2014/08/07

在写Javascript的时候经常遇到数组去重的问题,一直在基于jQuery写代码,在遇到数组需要去重的时候经常使用$.unique方法,由于开发测试环境是chrome浏览器,所以并没有察觉到自己已经错了这么久,直到昨天才发现$.unique在IE中是存在一些问题。


查看了jQuery的API,原来$.unique只处理删除DOM元素数组,而不能处理字符串或者数字数组。看了下jQuery源码,$.unique使用了Sizzle.uniqueSort的方法,好像在chrome/Firefox中,由于浏览器支持compareDocumentPosition则处理了字符串或数字数组,所以能在非IE浏览器中能正常排序。


参考了一下别人写的去重方法,自己稍微做了些修改:

Array.prototype.unique = function () {
    if (this.length === 0) return [];
    this.sort();
    var re = [this[0]];
    for (var i = 1; i < this.length; i++) {
        if (this[i] !== re[re.length - 1]) {
            re.push(this[i]);
        }
    }
    return re;
}

使用方法:[1,1,2].unique()

此方法只适用于数字或字符串数组的去重。