JS求数组差集的几种方法

JavaScript010

JS求数组差集的几种方法,第1张

第一种:如果不考虑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入门