删除数组中重复项(uniq)

作者:怿飞 来源:怿飞blog 时间:2009-12-28 12:23:00 

首先让我们看下 YUI 是如何处理的:

var toObject = function(a) {
    var o = {};
    for (var i = 0; i < a.length; i = i+1) {
     o[a[i]] = true;
    }
    return o;
};

var keys = function(o) {
    var a=[], i;
    for (i in o) {
        if (lang.hasOwnProperty(o, i)) { // YUI的方法
            a.push(i);
        }
    }
    return a;
};

var uniq = function(a) {
    return keys(toObject(a));
};

详细分析,见同事 长天 的分享 《巧妙去除数组中的重复项》

自己使用的方式与 YUI 的方式十分相似,不过仅使用了一次循环便完成了删除数组中重复项,如下:

var uniq = function (arr) {
    var a = [],
        o = {},
        i,
        v,
        len = arr.length;

    if (len < 2) {
        return arr;
    }

    for (i = 0; i < len; i++) {
        v = arr[i];
        if (o[v] !== 1) {
            a.push(v);
            o[v] = 1;
        }
    }

    return a;
}

经过了简单的测试:自己使用的方式性能远远高于 YUI 的方式。

抛砖引玉,欢迎大家提供更好的处理方法。

补充:

  1. 感谢 小猫 的细心,上述两种函数方法暂都无法处理好数字和数字字符串混合出现的情况,比如 [0,"0",1,"1",0]。

标签:删除,数组,uniq
0
投稿

猜你喜欢

  • asp如何从数据库中调出个人档案?

    2009-11-15 20:02:00
  • JavaScript 编程引入命名空间

    2007-10-11 19:00:00
  • 8个js表单验证函数

    2007-10-28 19:19:00
  • oracle chm帮助文件下载

    2010-07-16 12:49:00
  • Pivot,信息组织的梦想之窗

    2009-12-25 14:32:00
  • 实例讲解如何利用crontab定时备份MySQL

    2009-01-04 13:06:00
  • 正则表达式语法速查

    2007-11-11 10:43:00
  • 阿里巴巴中秋节logo设计的艰辛曲折过程

    2008-09-11 17:15:00
  • 怎样在MySQL数据库中导出整个数据库

    2008-12-31 15:13:00
  • Oracle DBA常用语句第1/2页

    2009-08-08 22:38:00
  • FrontPage XP设计教程3——网页的布局

    2008-10-11 12:20:00
  • sql如何在线创建新表?

    2010-06-22 21:21:00
  • Mozilla专有JavaScript扩展之一(__noSuchMethod__)

    2009-03-01 12:45:00
  • asp中数组的用法

    2008-05-12 22:29:00
  • 设计的商业价值

    2009-08-13 14:43:00
  • 用JS找出字符串中出现次数最多的字母

    2007-11-12 13:40:00
  • 一个ASP站内搜索的实例源代码

    2007-09-21 12:13:00
  • Dreamweaver MX 2004 试用心得

    2010-03-25 12:21:00
  • asp实现ACCESS数据库加密方法

    2008-04-18 12:33:00
  • 也说说语义

    2009-12-29 13:04:00
  • asp之家 网络编程 m.aspxhome.com