第一种:如果不考虑IE8的兼容性完全可以使用Foreach ,此方法求出arr1 减去 arr2的差集,
arr1 = [1,2,3,4]arr2 = [1,2,3]
var subSet = function (arr1, arr2) {
var set2 = new Set(arr2)
var subset = []
arr1.forEach(function(val, index) {
if (!set2.has(val)) {
subset.push(val)
}
})
return subset
}
//结果等于4
第二种是使用JQuery 的merge和grep的配合使用求差集,兼容IE8 、chrome等主流游览器
var alpha = [1, 2, 3, 4],beta = [1,2,3]
$.arrayIntersect = function(a, b)
{
return $.merge($.grep(a, function(i)
{
return $.inArray(i, b) == -1
}) , $.grep(b, function(i)
{
return $.inArray(i, a) == -1
})
)
}
window.console && console.log( $.arrayIntersect(alpha, beta) )
//结果等于4
第三种使用ES6 的set 方法类似与foreach方法
var subSet = function(arr1, arr2) {var set1 = new Set(arr1)
var set2 = new Set(arr2)
var subset = []
for (let item of set1) {
if (!set2.has(item)) {
subset.push(item)
}
}
return subset
}
es6新的数据结构set集合 类似数组 但是成员值 都是唯一 他们之间也可以相互转换
去重
交集
has是set集合的方法
Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
差集
并集
数组的迭代方法,每个方法都会接受两个参数:(1)要在每一项上运行的函数(2)运行该函数的作用域——影响this的值(可选)。传入方法中的函数会接受三个参数:(1)数组每项的值(2)该项在数组中的位置(3)数组对象本身。5种迭代方法的作用如下:
数组还有两个归并的方法:reduce和reduceRight。这两个方法会迭代数组的所有项,最终返回一个迭代的最后值。reduce方法从数组的第一项开始迭代,reduceRight则从数组的最后一项开始。两个方法接受参数相同,都是两个参数:一个是在在每项上调用的函数以及迭代的初始值(可选)。下面,我们对reduce方法的实现进行详解。
ES6规范中Set数据结构,类似于数组,但其中的值全都是唯一的。搭配数组的迭代方法,我们能够快速方便地实现两个或多个数组的交、并、差集。
MDN web docs
ECMAScript 6入门