JS数组交集、并集、差集的示例代码

 更新时间:2017年08月23日 09:41:49   作者:同梦奇缘  
本篇文章主要介绍了JS数组交集、并集、差集的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

 本文介绍了JS数组交集、并集、差集,分享给大家,具体如下:

由于下面会用到ES5的方法,低版本会存在兼容,先应添加对应的polyfill

Array.prototype.indexOf = Array.prototype.indexOf || function (searchElement, fromIndex) {
  var index = -1;
  fromIndex = fromIndex * 1 || 0;
  for (var k = 0, length = this.length; k < length; k++) {
    if (k >= fromIndex && this[k] === searchElement) {
      index = k;
      break;
    }
  }
  return index;
};

Array.prototype.filter = Array.prototype.filter || function (fn, context) {
  var arr = [];
  if (typeof fn === "function") {
    for (var k = 0, length = this.length; k < length; k++) {
      fn.call(context, this[k], k, this) && arr.push(this[k]);
    }
  }
  return arr;
};

依赖数组去重方法:

// 数组去重
Array.prototype.unique = function() {
  var n = {}, r = [];
  for (var i = 0; i < this.length; i++) {
    if (!n[this[i]]) {
      n[this[i]] = true;
      r.push(this[i]); 
    }
  }
  return r;
}

交集

交集元素由既属于集合A又属于集合B的元素组成

Array.intersect = function(arr1, arr2) {
  if(Object.prototype.toString.call(arr1) === "[object Array]" && Object.prototype.toString.call(arr2) === "[object Array]") {
    return arr1.filter(function(v){ 
     return arr2.indexOf(v)!==-1 
    }) 
  }
}
// 使用方式
Array.intersect([1,2,3,4], [3,4,5,6]); // [3,4]

并集

并集元素由集合A和集合B中所有元素去重组成

Array.union = function(arr1, arr2) {
  if(Object.prototype.toString.call(arr1) === "[object Array]" && Object.prototype.toString.call(arr2) === "[object Array]") {
    return arr1.concat(arr2).unique()
  }
}
// 使用方式
Array.union([1,2,3,4], [1,3,4,5,6]); // [1,2,3,4,5,6]

差集

A的差集:属于A集合不属于B集合的元素

B的差集:属于B集合不属于A集合的元素

Array.prototype.minus = function(arr) {
  if(Object.prototype.toString.call(arr) === "[object Array]") {
    var interArr = Array.intersect(this, arr);// 交集数组
    return this.filter(function(v){
      return interArr.indexOf(v) === -1
    })
  }
}
// 使用方式
var arr = [1,2,3,4];
arr.minus([2,4]); // [1,3]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • js中的闭包学习心得

    js中的闭包学习心得

    这篇文章主要介绍了js中的闭包学习心得以及重要点的代码写法,对此有兴趣的朋友跟着小编一起学习下吧。
    2018-02-02
  • JavaScript高阶函数_动力节点Java学院整理

    JavaScript高阶函数_动力节点Java学院整理

    这篇文章主要介绍了JavaScript高阶函数,详细讲解了什么是高阶函数和高阶函数的用法,有兴趣的可以了解下
    2017-06-06
  • JavaScript高级之闭包详解

    JavaScript高级之闭包详解

    这篇文章主要为大家介绍了JavaScript闭包,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • JavaScript实现倒计时功能2种方法实例

    JavaScript实现倒计时功能2种方法实例

    很多网站在做活动时会出现一个截止时间倒计时的提示,下面这篇文章主要给大家介绍了JavaScript实现倒计时功能2种方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • 基于js中的原型、继承的一些想法

    基于js中的原型、继承的一些想法

    下面小编就为大家带来一篇基于js中的原型、继承的一些想法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • 原生js实现回复评论功能

    原生js实现回复评论功能

    本文主要分享了原生js实现回复评论功能的示例代码。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • 深入理解Webpack 中路径的配置

    深入理解Webpack 中路径的配置

    这篇文章主要给大家介绍了关于Webpack2中路径配置的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • 如何在 JavaScript 中更好地利用数组

    如何在 JavaScript 中更好地利用数组

    这篇文章主要介绍了如何在 JavaScript 中更好地使用数组,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • JavaScript制作windows经典扫雷小游戏

    JavaScript制作windows经典扫雷小游戏

    扫雷是一款相当大众的小游戏,游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷。今天我们来看看如何使用javascript来实现这款小游戏
    2015-03-03
  • javascript获取网页宽高方法汇总

    javascript获取网页宽高方法汇总

    本文给大家汇总介绍了下javascript获取网页宽高的方法,以及各个浏览器下不同方法获取到的值的对比,有需要的小伙伴可以参考下。
    2015-07-07

最新评论