文档章节

js获取数组的交集(补集)

leona_lily
 leona_lily
发布于 2015/04/07 09:57
字数 441
阅读 21
收藏 1

1、(不推荐)刚开始写的时候使用如下的函数

function arrayIntersection ( a, b )

{

    var ai=0, bi=0;

    var result = new Array();

    while ( ai < a.length && bi < b.length )

    {

        if      ( a[ai] < b[bi] ) { ai++; }

        else if ( a[ai] > b[bi] ) { bi++; }

        else /* they're equal */

        {

            result.push ( a[ai] );

            ai++;

            bi++;

        }

    }

    return result;

}       //调用var $result = arrayIntersection (m,touResult);
解释:这是网上找到的一段代码,可以找出一部分相同的元素,但不是所有的,其中的原因就在于里面的if判断过程中,会漏掉里面的相同的元素,比如说a数组里面的元素都比b数组里面的第一个元素小,那么这个循环就不会遍历到b数组,最终得到的相同元素就是null

2、因为马上放假,不愿意动脑,就上网又开始找到了一些代码,完美实现效果

Array.prototype.contains = function(obj) {

    var i = this.length;

    while (i--) {

        if (this[i] === obj) {

            return true;

        }

    }

    return false;

}                 //array扩展出来的contains的方法,写上以后可以直接调用;

Array.prototype.each = function(fn){

    fn = fn || Function.K;

    var a = [];

    var args = Array.prototype.slice.call(arguments, 1);

    for(var i = 0; i < this.length; i++){

        var res = fn.apply(this,[this[i],i].concat(args));

        if(res != null) a.push(res);

    }

    return a;

};                    //array扩展出来的each方法

Array.prototype.uniquelize = function(){

    var ra = new Array();

    for(var i = 0; i < this.length; i ++){

        if(!ra.contains(this[i])){

            ra.push(this[i]);

        }

    }

    return ra;

};                    //array扩展出来的uniquelize方法

Array.intersect = function(a, b){

    return a.uniquelize().each(function(o){return b.contains(o) ? o : null});

};                    //实现数组的交集

用的时候可以如下:

var $result = Array.intersect(touResult,m);      完美实现呀
求补集的时候可以:

Array.complement = function(a, b){
return Array.minus(Array.union(a, b),Array.intersect(a, b));
}; 

求差集的时候可以:

Array.minus = function(a, b){
return a.uniquelize().each(function(o){return b.contains(o) ? null : o});
}; 

求并集的时候可以:

Array.union = function(a, b){
return a.concat(b).uniquelize();
};



十个赞

© 著作权归作者所有

共有 人打赏支持
leona_lily
粉丝 9
博文 96
码字总数 37848
作品 0
朝阳
程序员
【转】这些年,我收集的JavaScript代码(二)

以下内容来自,真心不错的系列博文,希望原楼主继续分享: http://7788a.iteye.com/blog/1610177 一、JavaScript跨平台事件   对于跨平台事件我们一般这么写(只例举添加事件): function a...

王小明123
2012/07/30
0
0
用 Json 来实现 PHP 与 JavaScript 间数据交换

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 简而论之,不管是xml还是json都是为了方便在客户端与服务器端交互数据的中转站,特别是用于对象型数据,比如最常见的数组。...

BENNEE
2011/03/22
0
0
javascript与php数据交换之json

这两天js跟php数据传递弄伤心了,特意整理一些资料,做个小结! json是js的一种数据格式,可以直接被js解析,当我们在结合php和javascript实现某些功能时,经常会用到它。php无法直接读取jso...

The-duke
2013/07/17
0
3
由js数组类型判断触发的浪漫思绪

一、前言 众所周知,js是门“动态”、“弱类型”编程语言,这意味着在js中可以很任性的定义变量,任性的同时也意味着需常在开发中对变量做类型判断,曾几何时,对数组变量的类型的判断是件很...

hanmin
06/08
0
0
精读《JS 引擎基础之 Shapes and Inline Caches》

1 引言 本期精读的文章是:JS 引擎基础之 Shapes and Inline Caches 一起了解下 JS 引擎是如何运作的吧! JS 的运作机制可以分为 AST 分析、引擎执行两个步骤: JS 源码通过 parser(分析器)...

黄子毅
06/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
47分钟前
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
7
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
17
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部