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

        ///集合取交集
Array.intersect = function () {
var result = new Array();
var obj = {};
for (var i = ; i < arguments.length; i++) {
for (var j = ; j < arguments[i].length; j++) {
var str = arguments[i][j];
if (!obj[str]) {
obj[str] = ;
}
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 = , j = this.length; i < j; i++) {
if (!tmp[this[i]]) {
tmp[this[i]] = ;
ret.push(this[i]);
}
} return ret;
}
//并集
Array.union = function () {
var arr = new Array();
var obj = {};
for (var i = ; i < arguments.length; i++) {
for (var j = ; j < arguments[i].length; j++)
{
var str=arguments[i][j];
if (!obj[str])
{
obj[str] = ;
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 = ; i < arr.length; i++) {
obj[arr[i]] = ;
}
for (var j = ; j < this.length; j++) {
if (!obj[this[j]])
{
obj[this[j]] = ;
result.push(this[j]);
}
}
return result;
}; console.log(Array.intersect(["", "", ""], ["", "", "", "", ""]));//[2,3]
console.log([, , , , , , , ].uniquelize());//[1,2,3,4,5,6]
console.log(Array.union(["", "", ""], ["", "", "", "", ""], ["", "", "", "", ""]))
console.log(["", "", "", "", ""].minus(["", "", ""]));

js Array 交集 并集 差集 去重的更多相关文章

  1. 【转】 js数组 Array 交集 并集 差集 去重

    原文:http://blog.csdn.net/ma_jiang/article/details/52672762 最劲项目需要用到js数组去重和交集的一些运算,我的数组元素个数可能到达1000以上, ...

  2. js求两个数组的交集|并集|差集|去重

    let a = [1,2,3], b= [2, 4, 5]; 1.差集 (a-b 差集:属于a但不属于b的集合)  a-b = [1,3] (b-a 差集:属于b但不属于a的集合)  b-a = [4 ...

  3. js求对象数组的交集/并集/差集/去重

    1.求交集 var arr1 = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3}]; var arr1Id = [1,2,3] ...

  4. LINQ交集/并集/差集/去重

    using System.Linq; List<string> ListA = new List<string>(); List<string> ListB = n ...

  5. (java/javascript) list 交集 并集 差集 去重复并集

    java list 交集 并集 差集 去重复并集 package com; import java.util.ArrayList; import java.util.Iterator; import ...

  6. spark之交集并集差集拉链

    spark之交集并集差集拉链 def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setMaster(&qu ...

  7. Python 求两个文本文件以行为单位的交集 并集 差集

    Python 求两个文本文件以行为单位的交集 并集 差集,来代码: s1 = set(open('a.txt','r').readlines()) s2 = set(open('b.txt','r') ...

  8. 如何求ArrayList集合的交集 并集 差集 去重复并集

    需要用到List接口中定义的几个方法: addAll(Collection<? extends E> c) :按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾 ...

  9. java 两个list 交集 并集 差集 去重复并集

    前提需要明白List是引用类型,引用类型采用引用传递. 我们经常会遇到一些需求求集合的交集.差集.并集.例如下面两个集合: List<String> list1 = new ArrayLi ...

随机推荐

  1. 咏南CS插件开发框架也可BS方式部署

    在几分钟的时间内,CS客户端也可以BS方式部署.

  2. POJ 2983 Is the Information Reliable? 差分约束

    裸差分约束. //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #i ...

  3. 正则表达式匹配完整img标签php实现

    处理html富文本的时候,碰到批量处理img标签,要把img标签格式化,并且去除不用的代码,class,各种data-等,首先想到使用正则匹配,然后处理匹配到的img标签和参数,经过一番尝试终于搞定了 ...

  4. webview 实现滑动前进后退功能

    实现该功能大家一定会想到在OnTouchListener里实现 webview.setOnTouchListener(new OnTouchListener() { @Override public ...

  5. 【枚举】bzoj3391 [Usaco2004 Dec]Tree Cutting网络破坏

    #include<cstdio> using namespace std; #define N 10001 int n; int v[N<<1],first[N],next[N ...

  6. 20151009 C# 第一篇 程序编写规范

    20151009 程序编写规范 1. 代码书写规则: 1).尽量使用接口,然后使用类实现接口. 2).关键语句写注释 3).避免写超过5个参数的方法,如果要传递多个参数,则使用结构 4).避免代码量过 ...

  7. C# IEnumerable,Lambda表达式和 Parallel并行编程的用法

    以前一直主要做C++和C方面的项目,对C#不太了解熟悉,但听说不难,也就一直没有在意学习C#方面的知识.今天有个C#项目,需要做些应用的扩展,同时修改一些bug.但看了C#代码,顿时觉得有些不适应了. ...

  8. php socket获取数据类

    <?php define("CONNECTED", true); define("DISCONNECTED", false); /** * Socket ...

  9. phpcms后台登陆验证码不显示的解决方法

    方法一:检查主机环境,是否已经开启gd库.可以用探针,或者检查php.ini文件,搜索extension=php_gd2.dll,检查前面是否有注释符号,去掉即可. 方法二:检查配置文件是否正确.打开 ...

  10. Delphi 的字符及字符串[5] - 字符串与 Windows API

    先说赋值: //赋值方法1: 给直接量 begin   SetWindowText(Handle, '新标题'); end; //赋值方法2: 定义它要的类型 var   p: PChar; begi ...