数组交集

1. 利用filter + indexOf

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var intersection = arr1.filter(function (val) {return arr2.indexOf(val) > -1;
})
console.log(intersection);   // [1, 3, 5]

但这种方法针对是value值比较简单的Number(不包括NaN)、String、Boolean类型, 因为indexOf 本质上还是使用 === 来判断。

2. 利用ES6中 Array.from方法及Set

function intersect (a, b) {var bSet = new Set(b);return Array.from(a.filter(function (val) {return bSet.has(val);}));
}
var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var intersection = intersect (arr1, arr2);
console.log(intersection);   // [1, 3, 5, NaN]

可以解决NaN

3. 利用ES7中数组新增的includes + filter

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var intersection = arr1.filter(function (val) {return arr2.includes(val);
})
console.log(intersection);   // [1, 3, 5, NaN]

数组并集

1. 利用filter + indexOf

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var union= arr1.concat(arr2.filter(function (val) {return arr1.indexOf(val) === -1;
}))
console.log(union);  // [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN, NaN]

2. 利用ES6中 Array.from方法及Set

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var union= Array.from(new Set(arr1.concat(arr2)));
console.log(union);   // [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN]

3. 利用ES7中新增的includes + filter

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var union= arr1.concat(arr2.filter(function (val) {return !arr1.includes(val)
}));
console.log(union);   // [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN]

数组差集

1. 利用filter + indexOf

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var difference = arr1.filter(function (val) {return arr2.indexOf(val) === -1;
}).concat(arr2.filter(function (val) { return arr1.indexOf(val) === -1
}));
console.log(difference);  //  [2, 4, 6, 7, 8, 9, NaN, NaN]

2. 利用ES6中 Array.from方法及Set

function difference (a, b) {var aSet = new Set(a), bSet = new Set(b);return Array.from(new Set(a.concat(b).filter(function (val) {return !aSet.has(val) || !bSet.has(val)})))
}
var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var differenceVal = difference (arr1, arr2);
console.log(differenceVal );  //  [2, 4, 6, 7, 8, 9]

3. 利用ES7中新增的includes + filter

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var difference = arr1.concat(arr2).filter(function (val) {return  !a.includes(val) || !b.includes(val)
});
console.log(difference);  // [2, 4, 6, 7, 8, 9]

js数组交集、并集、差集相关推荐

  1. js数组交集并集差集

    数组交集并集差集 /*1. 数组并集concat方法展开运算符reduce*/ const arr1 = [1, 3, 89, 20, 3, 6, 1, 47, 81, 6] const arr2 = ...

  2. python 数组 交集 并集 差集

    python 数组 交集 并集 差集 1.交集 a = [1, 3, 5] b = [2, 3, 4] print(set(a).intersection(set(b))) print(set(a) ...

  3. oracle 并集 时间_Oracle集合运算符 交集 并集 差集

    集合运算符:UNION/UNION ALL 并集,INTERSECT 交集,MINUS 差集 一.union求并集,公共部分只有包含一次 例:求emp表ename中含'A'或含有'M' SQL> ...

  4. A和B 单链表表示 集合,求其 交集 并集 差集

    A和B 单链表表示 集合的 交集 并集 差集 /* A和B 单链表表示 集合的 交集 并集 差集 */ //#include <iostream> //using namespace st ...

  5. php数组交集方法,PHP获得数组交集与差集的方法

    本文实例讲述了PHP获得数组交集与差集的方法.分享给大家供大家参考.具体分析如下: 一.数组的交集 array_intersect() array_intersect()函数返回一个保留了键的数组,这 ...

  6. php数组去交集,PHP获得数组交集与差集的方法

    本文实例讲述了PHP获得数组交集与差集的方法.分享给大家供大家参考.具体分析如下: 一.数组的交集 array_intersect() array_intersect()函数返回一个保留了键的数组,这 ...

  7. lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  8. java实现交集并集差集

    java实现交集并集差集 ***`package 第一次模拟测试; import java.util.ArrayList; import java.util.HashSet; import java. ...

  9. 采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  10. go自定义和使用set包处理列表 交集 并集 差集

    自定义交集 并集 差集 package mainimport "fmt"func main() {aList := []string{"1", "2& ...

最新文章

  1. commons-beanutils的使用
  2. 2021-03-16 汽车二自由度操纵稳定性 Matlab simulink
  3. 转:ibatis动态sql
  4. MicroPython实例之TPYBoard v102炫彩跑马灯WS2812B
  5. php编写程序计算积分_PHP论坛实现积分系统的思路代码详解
  6. c语言自己建个题库随机出题,自己建个题库随机出题 让学习效率大大提高
  7. 基于xterm.js + socket.js的Web SSH
  8. 2021-2027全球与中国抽屉五金市场情况与未来趋势研究报告
  9. java反向查找dns_windows – 反向DNS查找
  10. 迅捷路由器造成计算机无法上网,迅捷路由器不能上网怎么办
  11. 清明节前后 市场爆发了
  12. NSGA3算法及其MATLAB版本实现(转载)
  13. 安卓Android校园综合服务系统校园帮app
  14. 关于 Adobe PDF虚拟打印机
  15. 异星工厂 自动机器人_异星工厂建设机器人怎么用 异星工厂建设机器人机制介绍-游侠网...
  16. mysql防注入插件_MyBB HM_My Country Flags 插件'cnam'参数SQL注入漏洞
  17. FFmpeg4入门13:h264编码为mp4
  18. JS 判断手机当前是横屏还是竖屏
  19. 学习笔记(5):C#急速入门-单行和多行注释
  20. flutter开发web项目

热门文章

  1. C++的Json解析库:jsoncpp和boost .
  2. 蓝牙室内定位UWB常见场景定位分析
  3. 工具 网络游戏封包基础
  4. 关于android 进程CPU占用率高的原因分析
  5. 操作系统第五章笔记---线程
  6. 2021-04-21爬虫爬取b站直播间弹幕并制作词云
  7. 主题:程序的扩展性(BPL+DLL)
  8. 常用的编程工具(汇总贴)
  9. 毛球科技观察院|基于区块链技术重新构想电力市场
  10. mysql Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) fo...