第一種:如果不考慮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
第二種是使用JQ 的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; };