当前位置: 首页 > news >正文

js Array 交集 并集 差集 去重

最劲项目需要用到js数组去重和交集的一些运算,我的数组元素个数可能到达1000以上,网上的实现方式都是2次循环,性能不适合我的需求,1000*1000那循环次数太多了,所以我这里采用对象object来做处理,用空间换时间,code 如下:

        ///集合取交集
        Array.intersect = function () {
            var result = new Array();
            var obj = {};
            for (var i = 0; i < arguments.length; i++) {
                for (var j = 0; j < arguments[i].length; j++) {
                    var str = arguments[i][j];
                    if (!obj[str]) {
                        obj[str] = 1;
                    }
                    else {
                        obj[str]++;
                        if (obj[str] == arguments.length)
                        {
                            result.push(str);
                        }
                    }//end else
                }//end for j
            }//end for i
            return result;
        }

        //集合去掉重复
        Array.prototype.uniquelize = function () {
            var tmp = {},
                ret = [];
            for (var i = 0, j = this.length; i < j; i++) {
                if (!tmp[this[i]]) {
                    tmp[this[i]] = 1;
                    ret.push(this[i]);
                }
            }

            return ret;
        }
        //并集
        Array.union = function () {
            var arr = new Array();
            var obj = {};
            for (var i = 0; i < arguments.length; i++) {
                for (var j = 0; j < arguments[i].length; j++)
                {
                    var str=arguments[i][j];
                    if (!obj[str])
                    {
                        obj[str] = 1;
                        arr.push(str);
                    }
                }//end for j
            }//end for i
            return arr;
        }

        //2个集合的差集 在arr不存在
        Array.prototype.minus = function (arr) {
            var result = new Array();
            var obj = {};
            for (var i = 0; i < arr.length; i++) {
                obj[arr[i]] = 1;
            }
            for (var j = 0; j < this.length; j++) {
                if (!obj[this[j]])
                {
                    obj[this[j]] = 1;
                    result.push(this[j]);
                }
            }
            return result;
        };

        console.log(Array.intersect(["1", "2", "3"], ["2", "3", "4", "5", "6"]));//[2,3]
        console.log([1, 2, 3, 2, 3, 4, 5, 6].uniquelize());//[1,2,3,4,5,6]
        console.log(Array.union(["1", "2", "3"], ["2", "3", "4", "5", "6"], ["5", "6", "7", "8", "9"]))
        console.log(["2", "3", "4", "5", "6"].minus(["1", "2", "3"]));

 

相关文章:

  • 难道生活复杂就那么好玩吗?
  • HTML中设置input等文本框为不可操作
  • 重置Mysql密码SOP
  • Centos 系统禁ping设置
  • 计算机网络--静态路由
  • 白话 Ruby 与 DSL 以及在 iOS 开发中的运用
  • python re正则表达式模块
  • WTL之VS2013环境搭建
  • c语言编写经验逐步积累4
  • Session 和 Cookie 机制
  • C语言中预处理器的相关知识:
  • java基础 - 冒泡排序,随机数算法
  • 大写中文数字-財务
  • 关于android:focusable属性
  • php基础教程(一):预备知识
  • 网络传输文件的问题
  • chrome扩展demo1-小时钟
  • HTTP 简介
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • js对象的深浅拷贝
  • Just for fun——迅速写完快速排序
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Objective-C 中关联引用的概念
  • React-flux杂记
  • Redux 中间件分析
  • 汉诺塔算法
  • 欢迎参加第二届中国游戏开发者大会
  • 深入浏览器事件循环的本质
  • 数据可视化之 Sankey 桑基图的实现
  • 小程序 setData 学问多
  • - 转 Ext2.0 form使用实例
  • 《码出高效》学习笔记与书中错误记录
  • Java性能优化之JVM GC(垃圾回收机制)
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #在 README.md 中生成项目目录结构
  • $.ajax中的eval及dataType
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (3)STL算法之搜索
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C++17) optional的使用
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (C语言)fgets与fputs函数详解
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)jdk与jre的区别
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作