JS求数组差集的几种方法

JavaScript012

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

}

相同的a.filter(function(v){returnb.indexOf(v)>-1})不同的 a.filter(function(v){ return !(b.indexOf(v) >-1) }).concat(b.filter(function(v){ return !(a.indexOf(v) >-1)}))